【问题标题】:Model Form extra fields模型表单额外字段
【发布时间】:2011-03-01 12:28:45
【问题描述】:

所以我通过模型向表单添加了一个额外的字段,并使用这些选择:

A_CHOICES = (
    ('none', 'none'),
    # further conversion table

class MyForm(ModelForm):

extra_field_a = ChoiceField(choices=A_CHOICES)

如果此字段不是“无”,那么我想将其值用于模型中的字段,但我不确定如何检索它,我在 MyForm 中尝试过:

def cleaned_extra(self):
    if(self.cleaned_data.get('extra_field_a') != 'none'):
        return self.extra_field_a
    else:
        return self.original_field

但我得到一个 NameError,“未定义全局名称”?非常感谢任何帮助,

亚当

【问题讨论】:

    标签: python django forms django-models


    【解决方案1】:

    这正是您检索它的方式。除了时髦的语法,NameError 在哪里? self 未定义?你把这段代码放在哪里了。

    您通常会将这种类型的字段特定代码放在clean_FOO 方法中。 http://docs.djangoproject.com/en/dev/ref/forms/validation/#form-and-field-validation

    def clean_extra_field_a(self):
        data = self.cleaned_data.get('extra_field_a')
        if data != 'none':
            return data
        return None # remember to set this field as required=False
    
    def save(self, *args, **kwargs):
        # override save to do something with your extra field.
        self.instance.myfield = self.cleaned_data.get('extra_field_a')
        super(MyForm).save(*args, **kwargs)
    

    更新:在视图中保存没问题。

    mymodel = myform.save(commit=False) 
    # ModelForm's will return the object being created/edited on save()
    # commit=False will prevent a database save
    
    mymodel.myfield = myform.cleaned_data.get('extra_field_a')
    mymodel.save()
    
    # note if you have an m2m, there is an extra method to call on commit=False
    

    【讨论】:

    • 哦,抱歉——我仍然在从 PHP 进行漫长而痛苦的过渡,我在其他地方犯了一个错误。 & 试图在视图中保存,而不是您刚刚指出的 def save。
    • 保存在视图中不是问题,只要您记得从额外字段中提取数据,因为您的ModelForm 不知道如何处理它。让我更新一个保存在视图中的例子
    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2017-04-02
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多