5

多くのフィールドを持つモデルがあり、そのために 2 つの部分フォームを作成しています

#model
class Line_Settings(models.Model):
....
    line = models.ForeignKey(Line)
    All = models.BooleanField(default=False)
    Busy = models.BooleanField(default=False)
    MOH = models.CharField(max_length=100, blank=True, null=True)
    PLAR = models.CharField(max_length=100, blank=True, null=True)
....

    def save(self, commit = True, *args, **kwargs):
       ....
#Partial model form1
class General(ModelForm):
    class Meta:
        model = Line_Settings
        fields = ('MOH','PLAR')
#Partial model form2        
class Common(ModelForm):
    class Meta:
        model = Line_Settings
        fields = ('All','Busy') 

追加のロジックを実行するために、Line_Settings モデルの保存を上書きしました。

ロジックで使用するために、上書きされた save メソッドにいくつかのパラメーターを渡すことができる必要があります。

私のビューでは、2 つのパーシャル フォームに投稿データを入力し、save を呼び出すことができます。

call_forwards = Common(request.POST, instance=line_settings)
general = General(request.POST, instance=line_settings)

次のようにパラメーターを保存に渡す必要があります。

call_forwards.save(parameter="value")
general.save(parameter="value")

カスタム save() メソッドに引数を渡すことについて言及しました

部分フォームの保存を上書きすると、パラメーターにアクセスできます。

# overwritten save of partial form
def save(self, parameter, commit=True):
     print("In save overwrite Partial form Common "+str(parameter))
     #how Can I pass this parameter to the model save overwirite?
     super(Common, self).save(commit)

部分的な形式から、パラメーターを元のモデル (Line_Settings) に到達させて上書き保存するにはどうすればよいですか?

これはできますか?読んでくれてありがとう!

4

1 に答える 1

4

__init__元のモデルメソッドでパラメーターを定義することで、これを実現できました。

def __init__(self, *args, **kwargs):
    self.parameter= None
    super(Line_Settings, self).__init__(*args, **kwargs)

次に、部分的な形式で、このパラメーターにアクセスして、保存中に渡された値に設定できます。

 def save(self, *args, **kwargs):
     self.instance.parameter = kwargs.pop('parameter', None)
     super(Common, self).save(*args, **kwargs)

私の見解では、私は保存を次のように呼びました:

common = Common(request.POST, instance=line_settings)
common.save(parameter="something")
于 2012-09-04T14:38:59.107 に答える