[英]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.