簡體   English   中英

django double left join + django rest框架序列化器

[英]django double left join + django rest framework serializers

我有以下模型:

class Item(models.Model):
   name = models.CharField(max_length=100)

class Group(models.Model):
   name = models.CharField(max_length=100)

class ItemGroup(models.Model):
   item = models.ForeignKey(Item, on_delete=models.CASCADE)
   group = models.ForeignKey(Group, on_delete=models.CASCADE)

表示一個項目可以在多個組中。

我想查詢所有項目,並為每個項目將其組作為嵌套列表返回(如果該項目未出現在組中,則返回一個空列表)。

這就是我要使用sql進行的操作:

SELECT item.id, item.name, group.name
FROM items
LEFT JOIN item_group ON item.id = item_group.id
LEFT JOIN group ON group.id = item_group.group_id

(我可能也為分頁添加了ORDER BY ,但現在還沒關系)。

該查詢將為我提供每個項目X個也連接該項目的組的數量,並且至少有一行用於未出現在任何組中的項目(組設置為null)。
然后,我需要將其手動轉換為嵌套列表。

問題:
1.如何使用django ORM進行相同的聯接? 這是我找到的最接近的問題: django left join
但是答案實際上不是左聯接,而是prefetch_related ,我想避免。
2.如果我要創建像這樣的模型的嵌套dict
{item: [list of groups for the item]} 有沒有一種方法可以將其提供給Django Rest Framework序列化程序? 因為似乎ModelSerializer只能與查詢集一起使用。

1)您想要做的是與Django的工作方式相反,這將導致比其價值更大的痛苦。 我建議按照建議進行prefetch_related 您可能還想探索以下內容。 這是ManyToManyField上的文檔。

class Item(models.Model):
    name = models.CharField(max_length=100)

class Group(models.Model):
   name = models.CharField(max_length=100)
   items = models.ManyToManyField(Group, through='ItemGroup')

class ItemGroup(models.Model):
   item = models.ForeignKey(Item, on_delete=models.CASCADE)
   group = models.ForeignKey(Group, on_delete=models.CASCADE)

2)看一下ListField 我認為它應該可以幫助您完成在那里想要的工作。

暫無
暫無

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

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