在Django中合并两个ModelForm字段
我有一个模型,它里面有一个布尔类型的字段和一个外键。
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