簡體   English   中英

Django prefetch_related關於隱式關系

[英]Django prefetch_related on an implicit relation

假設我正在制作通訊錄應用。

class AddressBookEntry(models.Model):
    address_book = models.ForeignKey(AddressBook)
    name = models.CharField()
    email = models.EmailField()

class User(models.Model):
    name = models.CharField()
    email = models.EmailField()

這兩個對象都有一個電子郵件字段。 現在,我想查找給定用戶出現的所有地址簿。

    def entries(self):
        return AddressBookEntry.objects.filter(email=self.email)

那很好,但是當我獲取幾個用戶時,我需要為每個用戶執行一次數據庫查詢。 我想做User.objects.all().prefetch_related('entries') ,但這不起作用,因為entries是一種方法,而不是ForeignKey。

所以-

  • 有沒有辦法以某種方式告訴django,這里有一個關系,而它的穿透表沒有顯式包含多對多字段,所以我可以使用select_related?
  • 或者在我獲取用戶時是否有一種在對象之間進行JOIN的方法(我認為這是交叉聯接,但是比我現在得到的要好。)

更加“ Django”的方法是擁有一個明確的關聯字段:

class AddressBookEntry(models.Model):
    address_book = models.ForeignKey(AddressBook)
    name = models.CharField()
    user = models.ForeignKey("User", related_name="entries")

class User(models.Model):
    name = models.CharField()
    email = models.EmailField()

User.objects.all().select_related('entries')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM