[英]Django REST group foreign key models
我有像下面這樣的模型。
菜單模型
class Menu(models.Model):
name = models.CharField(max_length=40, unique=True, verbose_name='menu name')
物品型號
class Item(models.Model):
shop = models.ForeignKey(Shop)
menu = models.ForeignKey(Menu)
name = models.CharField(max_length=500)
price = models.IntegerField(default=0)
我想獲取商店 ID 的菜單。
Item.objects.filter(shop_id = 1)
如何按商店 ID 1 的菜單名稱對結果進行分組?
樣本。
{
menu: menuname1
items: [ {item1}, {item2}]
},
{
menu: menuname2
items: [ {item1}, {item2}]
}
謝謝..
您可以使用嵌套序列化程序獲得所需的輸出,如下所示:
class Item(models.Model):
class Meta:
unique_together = ('shop', 'menu',)
shop = models.ForeignKey(Shop)
menu = models.ForeignKey(Menu, related_name='items')
name = models.CharField(max_length=500)
price = models.IntegerField(default=0)
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = '__all__'
class MenuSerialzer(serializers.ModelSerializer):
items = ItemSerializer(many=True, read_only=True)
class Meta:
model = Menu
fields = ('name','items')
class MenuList(generics.ListAPIView):
serializer_class = MenuSerializer
def get_queryset(self):
return Menu.objects.filter(item__shop__id = 1)
我確定你不希望每次都得到 shop_id = 1 所以這樣做:
class MenuList(generics.ListAPIView):
def get_queryset(self):
shop_id = int(self.kwargs['shop_id'])
return Menu.objects.filter(item__shop__id = 1)
urlpatterns = [
url('^menus/(?P<shop_id>[0-9]+)/$', MenuList.as_view()),
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.