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 を使用できません。これは、save メソッドを変更して、この 2 番目のフィールド (認証されたユーザーに対応する UserProfile を保存するたびに指定する必要があります) を必要とするためです。 ModelForm クラスをサブクラス化して save メソッドをオーバーライドし、新しい ParentModel.save メソッドを呼び出して、現在ログインしているユーザーに入力することができるかどうか疑問に思っています。フォームの init で UserProfile を指定するだけでよいと思いますが、大きな問題は、ModelForm クラスをサブクラス化し、ParentModel の子クラスごとにサブクラス化できる ParentModelForm クラスのように作成できるかどうかです。これは可能ですか?もしそうなら、どうすればそれを行うことができますか?

すべてのヘルプは大歓迎です! 御時間ありがとうございます!

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 に答える