在django管理页面中过滤ManyToManyField

时间:2017-05-29 13:30:35

标签: python django django-models django-admin

问题

我在disciplines模型中显示了两个多对多的字段(subjectsExcerpt),我想在管理页面中仅显示subjectsdisciplines 1}}相应的。

实施例

DISCIPLINE | SUBJECT
portugues  | article
portugues  | verbs
portugues  | nons
math       | numbers
math       | equations

DISCIPLINE = math

DISCIPLINE | SUBJECT
math       | numbers
math       | equations

我如何部分解决

为此我在管理员中使用函数formfield_for_manytomany,它适用于过滤对象,但我无法弄清楚如何根据{{1过滤subject对象选择,

我尝试了什么

我尝试使用model.py discipline中的函数返回相应的id,然后过滤主题,但这种方法在我的管理代理模型中似乎不起作用,因为引发了错误{{ 1}}可能因为我可以在model.py之外访问。我试过在admin代理中声明这个方法,但也不起作用。

我的代码

get_disciplines

我不是django的专业人士,所以我认为对于有更多经验的人来说可以很简单,我希望你能帮助我

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,但它不太好,但它的工作

def formfield_for_manytomany(self, db_field, request, **kwargs):
    if db_field.name == "subjects":
        self_pub_id = request.resolver_match.args[0]

        d = Excerpt.objects.get(id=self_pub_id).discipline.first()

        kwargs["queryset"] = Subject.objects.filter(disciplines=d)

    return super(ExcerptTaggerAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

如果有人有更好的解决方案,我将不胜感激