0

私はPython+Djangoにかなり慣れていないので、次の問題に悩まされています。次のようなカスタムModelFieldを作成しました。

class MyField(models.TextField):

    def __init__(self, *args, **kwargs):
        super(MyField, self).__init__(*args, **kwargs)

    def pre_save(self, model_instance, add):
        # custom operations here
        # need access to variable xyz

このフィールドを使用するモデルは次のようになります。

 class MyModel(models.Model):
     my_field = MyField()

     def __init__(self, model, xyz, *args, **kwargs):
         self.instance = model
         # how to pass xyz to ModelField before pre_save gets called?
         self.xyz = xyz 

     def save(self, *args, **kwargs):
         if self.instance:
             self.my_field = self.instance    

Q:コメントにあるように、実行時に、理想的にはmy_field.pre_save()が呼び出される前に、変数をModelFieldインスタンスに渡す方法はありますか?

4

1 に答える 1

1

変数を渡すために何もする必要はありませんxyz。これはモデル上のインスタンス変数であるため、model_instanceに渡される変数にすでに存在します。pre_save()

class MyField(models.TextField):

    def pre_save(self, model_instance, add):
        ...
        # Access model_instance.xyz here
        ...
        # Call the superclass in case it has work to do
        return super(MyField, self).pre_save(model_instance, add)
于 2012-10-03T20:16:10.007 に答える