0

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

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

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

当我保存表单时,我收到一个 ValueError (Cannot assign "u'1'":Author.book" must be a Book instance)。由于 FK 关系,这个错误是有道理的。但是,如果我添加一个“print”声明代码,不做其他更改,然后保存记录,它可以工作。 ValueError 神奇地消失了。我已经尝试了很多次,确保我没有无意中进行另一个更改,并且每次都有效。

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

4

1 回答 1

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)
于 2009-06-29T18:49:58.590 回答