2013-06-21 232 views
0

我有3個表格,TextObj,User,SecurityCheck。第三個表具有一個引用TextObj的外鍵屬性(textobj),並且存在從SecurityCheck到User的多對多字段(sharedWith)。django模型複雜查詢

class SecurityCheck(models.Model): 
    textobj=models.ForeignKey(TextObj) 
    owner=models.CharField(max_length=255) 
    sharedWith=models.ManyToManyField(User) 

    def __init__(self,owner,filename,requestingUsername): 
     self.owner=owner 
     self.textobj=TextObj.filter(filename=filename) 
     self.sharedWith.add(User.objects.filter(username=requestingUsername)) 

,我需要做哪些獲取具有在sharedWith領域特定用戶和特定的文件名(這是TextObj的屬性)

+0

'TextObj.objects.filter(securitycheck__sharedWith =用戶,文件名...)' –

+0

的反向查詢的外鍵允許嗎? –

+0

是的,我已經添加了答案 –

回答

1

你可以輕鬆地查詢Textobj的所有實例的查詢跨度(反向)的關係:

TextObj.objects.filter(securitycheck__sharedWith=user, filename="foo") 

https://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships

Dja保護ngo提供了一種強大而直觀的方式來在查找中「追蹤」關係,在幕後自動爲您處理SQL JOIN。要跨越關係,只需使用模型中相關字段的字段名稱(用雙下劃線分隔),直到您到達所需的字段。

它也向後工作。要引用「反向」關係,只需使用模型的小寫名稱即可。