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