我有一個模型ModelA。基於字段/列值的django過濾器
class ModelA:
m2m_1_field = models.BooleanField()
#lots of other fields
它有2 m2m關係m2m_1和m2m_2都返回相同類型。
如果ModelA的字段m2m_1_field爲True,那麼我們需要從m2m_1中獲取m2m結果(如instance.m2m_1.all())。
如果ModelA的字段m2m_1_field爲False,那麼我們需要從m2m_2獲取m2m結果(如instance.m2m_2.all())。
所以,當搜索這個模型時,我也必須搜索這些m2m關係。
比方說,我們需要尋找M2M對象與IDS 1和2。然後,我們應該做的:
if m2m_1_field is True:
for id in [1,2]:
queryset = queryset.filter(m2m_1__id=id)
if m2m_1_field is False:
for id in [1,2]:
queryset = queryset.filter(m2m_2__id=id)
以上只是theoritical的解釋,我們如何能做到這一點幾乎?
或者乾脆忘掉m2m,只是假設有兩個字段f1,f2(兩個字段)。如果m2m_1_field爲True,則需要搜索f1字段,如果m2m_1_field爲False,則需要搜索f2字段。怎麼樣 ?
只是一個猜測:
filter(Q(m2m_1_field=True, f1=val) | Q(m2m_1_field=False, f2=val))) Is this right?
請讓我知道了進一步澄清。
創建模型管理器,根據字段布爾值進行相應的過濾。 – petkostas
我沒有得到你。請舉例。 – user2349115
https://docs.djangoproject.com/en/1.6/topics/db/managers/ – petkostas