2015-12-21 34 views
1

使用Django過濾器,我有判斷書寫的判斷。該機型是大致爲:如何在Django過濾器中創建循環關係

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." 

APP 2: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(例如:「所有法官正在寫關於種族的判斷)」,或者我可以過濾判斷由他們撰寫的評委過濾(例如,「由黑人法官撰寫的所有判決書」)。

不幸的是,這不起作用,我得到一個關於嘗試導入字符串值而不是其他的錯誤。有沒有辦法做到這一點?

+0

你可以在這裏包含你的錯誤的追溯?另外,這是完整的代碼?另外,什麼是'RelatedFilter'?我無法在django-filter中找到對此的引用。 –

+0

感謝您的幫助,@JoeyWilhelm。我忘了提及這是django-rest-framework-filters,而不是通常的django-filters,但無論如何,我都以最愚蠢的方式計算出它(見下文)。我發了一個PR來調整文檔,以使這個信息在未來更加突出。希望其他人會從中受益。 – mlissner

回答

0

我很遺憾以這種方式回答我自己的問題,但是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') 

然後生活是美好的。

+0

你確定第二個是正確的嗎? 「判斷」過濾器似乎是指自己。 –

+0

你是對的,又是!謝謝。 – mlissner