2013-12-11 52 views
0

所以,我只是爲我自己的理智......我做了一個API的問題,但它是非常多餘的,因爲同樣的操作需要在多個不同的對象進行:Django的查詢集過於冗餘

def seen_by(self,user): 
    return self.filter(seen__user=user) 
def created_by(self,user): 
    return self.filter(created__user=user) 
#and the list goes on 

對於API,名稱將總是用下劃線分隔的單詞,並具有我需要作爲第一個單詞的表格的單詞。 有什麼辦法可以做到,所以我不必如此多餘?

+0

你確定你需要擺在首位,這些方法呢?也許客戶可以直接調用'queryset.filter'? –

+0

這些都是簡化的,有些是6+行將被大量使用,所以一種方法是有用的 –

回答

2

如果我現在明白了這個問題,所以:

def field_by(self, field_name, user): 
    return self.filter(**{field_name + '__user': user}) 
+0

10好吧,這很酷,但實際上我使用過濾器和遍歷多個關係,所以這實際上並沒有幫助。我將改變問題的方式看起來更清楚 –

+0

更新了答案。 – crazyzubr

+0

這是一個非常聰明的黑客。我正在考慮做這樣的事情,但我忘了我可以將字典壓扁到關鍵字參數 –

1

您可能想要創建一個抽象模型並讓模型繼承它。

class Base(models.Model): 
    def seen_by(self, user): 
     return self.seen.get(user=user) 

    class Meta: 
     abstract = True 

class ChildModel(Base): 
    ... 
+0

這不能解決我的問題......這些都在自定義查詢集,所以它被放入每個模型沒有重複...我不喜歡爲數據庫中的10多個表格做類似的功能,我覺得我應該只寫一次 –