我在Django中有两个通过ForeignKey相关的模型。 (我正在使用Django 1.3)
Class Person(models.Model):
# some fields here like name, gender, etc...
Class Course(models.Model):
# some fields here
contact = models.ForeignKey(Person, blank=True, null=True)
在课程的管理变更列表视图中,我希望能够通过ForeignKey联系人过滤课程。在admin.py中我得到了:
class CourseAdmin(admin.ModelAdmin):
list_filter = ('contact',)
这项工作非常好。我可以通过所有可用的联系人过滤课程。现在我想只显示那些实际上附有课程的联系人。 我在这里阅读了通过创建自定义FilterSpec来实现CustomFilters。我不知道这是正确的方向,因为我只需要进一步过滤用于显示联系人选择的查询集。
在shell中,我得到了所需的查询集:
contacts=Person.objects.filter(course__in=Course.objects.all()).distinct()
我已经读过你可以在1.4中轻松实现这一点,但我仍然必须遵守1.3 有人可以指出我正确的方向吗?谢谢!
答案 0 :(得分:1)
Django 1.3也支持过滤器,但过滤器类在1.4中被移动/重命名。使用FilterSpec是实现目标的方法。您不仅需要过滤查询集,还要从QueryString中正确处理应用的过滤器。所以继续使用过滤器。这是一个非常好的片段,处理FK过滤,并有不错的选项:http://djangosnippets.org/snippets/2260/