【问题标题】:Passing parameters from partial form to model during save Django在保存Django期间将参​​数从部分表单传递给模型
【发布时间】:2012-08-31 18:45:25
【问题描述】:

我有一个包含许多字段的模型,为此我创建了两个部分表单

#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。

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

我需要像这样将参数传递给保存:

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

我已经提到passing an argument to a custom save() method

如果我覆盖部分表单上的保存,我可以访问该参数。

# 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)保存覆盖?

这可以吗? 提前感谢您的阅读!

【问题讨论】:

  • 不幸的是,ModelForm 无法将参数传递给实例 save() 方法,因此您必须重写并重新实现表单保存方法,或者使用 commit=False 调用它并手动保存.

标签: django django-models django-forms


【解决方案1】:

我可以通过在我的原始模型__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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2014-02-24
    • 2019-01-11
    • 2023-03-20
    • 2011-08-22
    • 2013-01-17
    相关资源
    最近更新 更多