django - ModelForm User Mixin -
i've got models user field.
for purpose i'd create form mixin add self.user instance (which provided form in views). possible ?
here's example
class userformmixin(object): """removes user instance kwargs , adding object""" def __init__(self, *args, **kwargs): super(userformmixin, self).__init__(*args, **kwargs) self.user = kwargs.pop('user') def save(self, **kwargs): obj = super(userformmixin, self).save(commit=false) obj.user = self.user if kwargs['commit']: return obj.save() else: return obj what i'd achieve:
class someformwithuserfield(userformmixin, modelform): class meta: model = somemodelwithuserfield fields = ['fields without user'] def save(self, **kwargs): data = super(someformwithuserfield, sefl).save(commit=false) #data user prepended #do other stuff data if kwargs['commit']: return data.save() else return data class someotherformwithuser(userformmixin, modelform): class meta: model = someothermodel fields = ['some fields without user'] # no need save here.. standard model form user prepended on save() the problem userformmixin doesn't know model instance? or wrong here? getting problems.. 'commit' kwargs key error.. or object not saved..
you're close, have logic errors. first, in order override modelform methods, mixin needs inherit modelform.
class userformmixin(forms.modelform): ... then, forms inherit inherit userformmixin, not modelform.
class someotherformwithuser(userformmixin): ... second, __init__ method override incorrect. need accept , args , kwargs passed it.
def __init__(self, *args, **kwargs): ... finally, don't override save method again, in subclass. guess won't technically hurt anything, what's point of inheritance if you're going repeat code, anyways? if user not nullable, can add if block check if self.user not none before adding model. of course, if user not nullable, model won't save without self.user anyways.
Comments
Post a Comment