相關模型的自定義查詢集比方說,我有兩個型號:Book
和Author
過濾器通過在Django
class Author(models.Model):
name = models.CharField()
country = models.CharField()
approved = models.BooleanField()
class Book(models.Model):
title = models.CharField()
approved = models.BooleanField()
author = models.ForeignKey(Author)
每個兩款車型都有一個approved
屬性,它顯示或隱藏從網站的對象。如果Book
未被批准,它將被隱藏。如果Author
未被批准,他所有的書都隱藏起來。
爲了在乾燥方式來定義這些標準,使得自定義查詢集看起來像一個完美的解決方案:
class AuthorQuerySet(models.query.QuerySet):
def for_site():
return self.filter(approved=True)
class BookQuerySet(models.query.QuerySet):
def for_site():
reuturn self.filter(approved=True).filter(author__approved=True)
掛鉤這些QuerysSets到相應的模式後,可以查詢這樣的:Book.objects.for_site()
,而不需要每次都對所有的過濾進行硬編碼。
儘管如此,這種解決方案仍然不夠完美。後來,我能夠決定另一個過濾器添加到作者:
class AuthorQuerySet(models.query.QuerySet):
def for_site():
return self.filter(approved=True).exclude(country='Problematic Country')
而且這個新的過濾器將只在Author.objects.for_site()
工作,但不是在Book.objects.for_site()
,因爲它是硬編碼。
所以我的問題是:是否有可能應用過濾在不同的模式時,以便它類似於此相關模型的自定義查詢集:
class BookQuerySet(models.query.QuerySet):
def for_site():
reuturn self.filter(approved=True).filter(author__for_site=True)
其中for_site
是Author
模型的自定義QuerySet。
我不知道是否有幫助,但嘗試[這](https://simpleisbetterthancomplex.com/tips/2016/08/16/django-tip-11-custom-manager-with-chainable-querysets。 html) –
這正是我所說的*把這些QuerysSets連接到相應的模型*之後。但我不明白它如何幫助使用該管理器來過濾其他相關模型的實例。也許我錯過了什麼? – BartoNaz
你不會錯過任何東西,我真的認爲這是一個很好的問題,我不認爲你會找到一些開箱即用的東西。你可以看看[自定義查找文檔](https://docs.djangoproject.com/en/1.11/howto/custom-lookups/)併爲自己編寫代碼。 –