使用ModelForm和保存的奇怪行为

时间:2009-06-29 18:45:24

标签: python django modelform

这个问题很奇怪,我希望有人可以帮助我。为了论证,我有一个与Book模型有ForeignKey关系的Author模型。当我显示作者时,我希望有一个ChoiceField,它只显示与该作者相关的书籍。因此,我重写了AuthorForm。 init ()方法,并根据基于作者ID过滤书籍的查询创建了一个选择列表(元组)。元组是书籍ID和书名的组合(即,(1,'Moby Dick'))。然后将这些“选择”分配给ModelForm的选择属性。

当表单在模板中呈现时,ChoiceField会正确显示,仅列出与该作者关联的书籍。

这就是事情变得奇怪的地方。

当我保存表单时,我收到一个ValueError(不能分配“u'1'”:Author.book“必须是Book实例)。由于FK关系,这个错误是有道理的。但是,如果我添加一个“打印”语句到代码,不做任何其他更改,然后保存记录,它的工作原理.ValueError神奇地消失了。我已经尝试了很多次,确保我没有无意中做了另一个更改,它的工作原理每一次。

有谁知道这里发生了什么?

1 个答案:

答案 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)