簡體   English   中英

Django REST 組外鍵模型

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

網址.py

urlpatterns = [
   url('^menus/(?P<shop_id>[0-9]+)/$', MenuList.as_view()),
]

暫無
暫無

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

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