2

所以我有这个类,它是一堆其他类的抽象父类,我们称它为 ActivityModel (代表某种最新活动/或对该对象所做的更改),我想重写 save 方法以获取另一个参数保存对象的时间,因此我将其定义如下。

class ActivityModel(models.Model):
    last_updated = models.DateTimeField(auto_now=True)
    updater = models.ForeignKey(UserProfile)
    change = models.CharField(max_length=255)

    def save(self, updater, change, *args, **kwargs):
        self.updater = updater
        self.change = change
        super(ActivityModel, self).save(*args, **kwargs)

    class Meta:
        abstract = True

但是现在我继承这个类的所有模型都不能使用 ModelForms 因为我已经更改了保存方法以要求第二个字段(与经过身份验证的用户相对应的 UserProfile,每次保存时都必须提供)所以我是想知道我是否可以对 ModelForm 类进行子类化以覆盖它的 save 方法,以便它调用新的 ParentModel.save 方法并填写已提供给它的当前登录用户。我想我可以只在表单 init 上提供 UserProfile,但我遇到的一个大问题是是否可以将 ModelForm 类子类化并像 ParentModelForm 类一样创建,然后可以为 ParentModel 的每个子类创建子类。这可能吗?如果可以,我将如何去做?

非常感谢所有帮助!谢谢你的时间!

4

1 回答 1

4

ModelForm 也是一个与其他类具有相似行为的 python 类。

#Inherits from ModelForm class
class ParentModelForm(forms.ModelForm):
...
...
   def save(self, *args, **kwargs):
     ...
     ...
#Inherits from ParentModelForm
class ChildModelForm(ParentModelForm):
..
..
  #You would have to override the Meta class
  class Meta:
      model = Child
  def save(self, *args, **kwargs):
       #Calling the parent model form save method
       super(ChildModelForm, self).save(*args, **kwargs)
于 2012-12-09T00:23:13.210 回答