在管理员更改列表视图中筛选外键选项

时间:2012-07-03 11:07:37

标签: django django-admin

我在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 有人可以指出我正确的方向吗?谢谢!

1 个答案:

答案 0 :(得分:1)

Django 1.3也支持过滤器,但过滤器类在1.4中被移动/重命名。使用FilterSpec是实现目标的方法。您不仅需要过滤查询集,还要从QueryString中正确处理应用的过滤器。所以继续使用过滤器。这是一个非常好的片段,处理FK过滤,并有不错的选项:http://djangosnippets.org/snippets/2260/