在Django中合并两个ModelForm字段

0 投票
1 回答
1155 浏览
提问于 2025-05-01 14:56

我有一个模型,它里面有一个布尔类型的字段和一个外键。

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 应该是 null,而 is_anonymous 应该是 true。

我想我需要把查询集 ModelB.objects.all() 加入到选项列表中。

self.fields['field_name'].widget = forms.Select(choices=[(False, "Not anonymous"), (True, "Anonymous"),])

但是这样做会把结果保存到字段 field_name,这就不对了。

暂无标签

1 个回答

0

这里不需要把字段合并在一起。你只需要把外键字段的空值设置为'匿名',然后在清理方法中处理这个问题就可以了。

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

撰写回答