这个问题很奇怪,我希望有人可以帮助我。为了论证,我有一个与Book模型有ForeignKey关系的Author模型。当我显示作者时,我希望有一个ChoiceField,它只显示与该作者相关的书籍。因此,我重写了AuthorForm。 init ()方法,并根据基于作者ID过滤书籍的查询创建了一个选择列表(元组)。元组是书籍ID和书名的组合(即,(1,'Moby Dick'))。然后将这些“选择”分配给ModelForm的选择属性。
当表单在模板中呈现时,ChoiceField会正确显示,仅列出与该作者关联的书籍。
这就是事情变得奇怪的地方。
当我保存表单时,我收到一个ValueError(不能分配“u'1'”:Author.book“必须是Book实例)。由于FK关系,这个错误是有道理的。但是,如果我添加一个“打印”语句到代码,不做任何其他更改,然后保存记录,它的工作原理.ValueError神奇地消失了。我已经尝试了很多次,确保我没有无意中做了另一个更改,它的工作原理每一次。
有谁知道这里发生了什么?
答案 0 :(得分:2)
不太确定你做错了什么,但最好只修改查询集:
class ClientForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.affiliate = kwargs.pop('affiliate')
super(ClientForm, self).__init__(*args, **kwargs)
self.fields["referral"].queryset = Referral.objects.filter(affiliate = self.affiliate)
class Meta:
model = Client
以上内容直接来自我的一个项目,它完美地只显示与传递的会员相关的推荐对象:
form = ClientForm(affiliate=request.affiliate)