Django)如何在ManyToMany,OneToMany关系中连接urls-views-models

问题描述 投票:0回答:1

我创建了一些具有ManyToMany,OneToMany关系的模型,然后我尝试在views.py中创建适当的类,以便可以看到与所选模型相关的子模型。

但是在连接models-serializers-views-urls方面,我无法弄清楚如何让它工作......

所以,我想要做的是:(简化)有3个型号。

  1. 派对
  2. 餐饮

所以PartyPeople有许多关系,而且与Food有OneToMany关系。当我像/party_id/people_id那样到达网址时,我希望从给定的对方ID中获取特定人员的信息。

这是我的代码。

models.朋友

class Party(models.Model):
    par_id = models.TextField()
    par_people = models.ManyToManyField(People)

class People(models.Model):
    peo_id = models.TextField()
    peo_name = models.TextField()
    peo_type = models.TextField()

class Food(models.Model):
    foo_id = models.TextField()
    foo_party = models.ForeignKey(Party, on_delete=models.CASCADE)

serialize认识.朋友

class PartySerializer(serializers.ModelSerializer):
    class Meta:
        model = Party
        fields = ('par_id', 'par_people')
# People, Food has same structure...

views.朋友

class PartyList(generics.ListAPIView):
    queryset = Party.objects.all()
    serializer_class = PartySerializer
# People, Food has same structure...

URLs.朋友

这是我迷路的部分

#redundancy reduced...(e.g. import)
urlpatterns = [
    path('party/<int:par_id>/<int:peo_id>', views.PartyList.as_view()),
    path('party/<int:par_id>/<int:foo_id>', views.PartyList.as_view()),
]

因此,如果我到达website/party/1/3,我想看到派对的人的信息(其peo_id为3)(par_id为1)。对于食物,它是一样的。

我应该在views.py上新课程以使其有效吗?但是如果我使用PartyList视图类,如何在同一时间检查par_idfoo_id ..?任何帮助将非常感激。

django django-models django-rest-framework django-views django-urls
1个回答
1
投票

我觉得这样的事情应该有效。如果使用peo_id或foo_id然后在此基础上过滤查询集,则可以解决基本原则。

def get (self, *args, **kwargs):
    id = kwargs.get(peo_id, None)
    if id:
        self.queryset.filter(par_people__peo_id=id)
    else:
        id = kwargs.get(foo_id, None)
        self.queryset.filter(foo_party=id)
© www.soinside.com 2019 - 2024. All rights reserved.