2009-06-29 32 views
0

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

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

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

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

有谁知道是怎么回事

+0

你在打印?你能显示你的代码吗? – 2009-06-29 18:55:05

回答

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) 
+0

或提供自定义管理器。 – 2009-06-29 18:51:42