【问题标题】:Strange behavior with ModelForm and savingModelForm 和保存的奇怪行为
【发布时间】:2009-06-29 18:45:24
【问题描述】:

这个问题很奇怪,希望有人能帮助我。为了论证,我有一个 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 关系,这个错误是有道理的。但是,如果我添加一个对代码“打印”语句,不做任何其他更改,然后保存记录,它可以工作。ValueError 神奇地消失了。我已经尝试了很多次,确保我没有无意中进行另一个更改,并且它可以工作每次。

有人知道这里发生了什么吗?

【问题讨论】:

  • 你在打印什么?你能展示你的代码吗?

标签: python django modelform


【解决方案1】:

不太确定你做错了什么,但最好只修改查询集:

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)

【讨论】:

  • 或者提供定制的Manager。
  • 很棒的建议!工作完美。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 2015-05-11
相关资源
最近更新 更多