在Django中使用ModelChoiceField的向后关系(即FOO_set)

时间:2012-07-11 07:15:22

标签: python django

我有一个名为Movie的模型,它有一个名为Person的ManyToManyField名为director,我正在尝试使用ModelChoiceField创建一个表单,如下所示:

class MovieSearchForm(forms.Form):
    producer = forms.ModelChoiceField(label='Produced by',
                                      queryset=movies.models.Person.producer_set,
                                      required=False)

但这似乎无法编译(我正在为使用该表单的视图获取ViewDoesNotExist异常,但如果我只是用所有person对象替换查询集就会消失),我猜是因为' .producer_set'正在被'早期'评估。我怎样才能完成这项工作?

这是电影/人物类的相关部分:

class Person(models.Model):
    name = models.CharField(max_length=100)

class Movie(models.Model):
    ...
    producer = models.ForeignKey(Person, related_name="producers")
    director = models.ForeignKey(Person, related_name="directors")

我想要做的就是获得一些在某些电影的制作人领域中使用过的人。

1 个答案:

答案 0 :(得分:1)

我写了一篇评论,要求提供更详细的描述,但这里有一些指示可以让你走上正确的轨道:

1)您应该在声明的末尾添加.all()

2)您应该在模型和字段之间的语句中添加use objects或其他一些管理器。

3)您正在查询某人的producer_set。从逻辑上讲,我会假设您应该为这样的生产者查询电影模型(取决于您的模型和用例):queryset=movies.models.Movie.objects.producers.all()