在Django中组合两个ModelForm字段

时间:2014-11-04 17:41:20

标签: python django django-models django-forms django-views

我有一个带有布尔字段和外键的模型

class ModelA(models.Model):
    is_anonymous = BooleanField(default=False)
    page = ForeignKey(ModelB, null=True)

我想在选择字段中组合这两个字段。

它应该有一个选项<option value="anonymous">Anonymous</option>ModelB中每个对象的选项。

因此,如果在<select>中选择了某个网页,则该字段is_anonymous应为false,如果选择匿名,则字段page应为空,is_anonymous应为true

我想我必须将查询集ModelB.objects.all()添加到

中的选项列表中
self.fields['field_name'].widget = forms.Select(choices=[(False, "Not anonymous"), (True, "Anonymous"),])

但它会将结果保存到错误的字段field_name

1 个答案:

答案 0 :(得分:0)

此处无需合并字段。您可以将外键字段的empty_value设置为'anonymous',并在clean方法中处理它。

class ModelAForm(forms.ModelForm):
    page = forms.ModelChoiceField(queryset=ModelB.objects.all(), empty_value="Anonymous")

    class Meta:
        model = ModelB

    def clean(self):
        if not self.cleaned_data['page']:
            self.cleaned_data['anonymous'] = True