【问题标题】:How to create circular relationships in django-filter如何在 django-filter 中创建循环关系
【发布时间】:2016-03-28 03:15:52
【问题描述】:

使用 django-filters,我有法官写的判断。模型大致是:

app1:models.py:

from app2.models import Judge
class Judgement(model.Models):
    judges = models.ManyToManyField(Judge, related_name="judgements")
    topic = models.TextField(help_text="The topic the judgement is about."

app2:models.py

class Judge(models.Models):
    name = CharField(max_length=100)
    race = CharField(max_length=5, choices=RACES)

我希望能够通过一个或另一个过滤判断或法官,所以我的过滤器应该是:

class JudgementFilter(filters.FilterSet):
    # THIS DOESN'T WORK. 
    judges = RelatedFilter('JudgeFilter', name='judges')

class JudgeFilter(filters.FilterSet):
    judgements = RelatedFilter(JudgementFilter, name='judgements')

如果这样可行,我可以向 API 查询由他们编写的判断的属性过滤的法官(例如:“所有法官都在写关于种族的判断”),或者我可以过滤由撰写它们的法官过滤的判决(例如,“所有由黑人法官撰写的判决”)。

不幸的是,这不起作用,我在尝试导入字符串值而不是其他内容时遇到错误。有没有办法做到这一点?

【问题讨论】:

  • 您能在此处包含错误的回溯吗?另外,这是完整的代码吗?另外,RelatedFilter 是什么?我在 django-filter 中找不到对它的引用。
  • 感谢@JoeyWilhelm 的帮助。我忘了提到这是 django-rest-framework-filters,而不是通常的 django-filters,但无论如何,我以最愚蠢的方式想出了它(见下文)。我发送了一个 PR 来调整文档,以使这些信息在未来更加突出。希望其他人能从中受益。

标签: django django-rest-framework django-filter


【解决方案1】:

我很遗憾以这种方式回答我自己的问题,但this information was in the readme 我完全错过了它。

解决方案是使用完整路径:

class JudgementFilter(filters.FilterSet):
    judges = RelatedFilter('path.to.my.app.JudgeFilter', name='judges')

class JudgeFilter(filters.FilterSet):
    judgements = RelatedFilter(JudgementFilter, name='judgements')

然后生活是美好的。

【讨论】:

  • 你确定第二个是正确的吗? judgements 过滤器似乎指的是它自己。
  • 你是对的,再次!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 2022-01-18
  • 2020-03-19
相关资源
最近更新 更多