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

时间:2019-04-30 05:09:36

标签: django django-models django-rest-framework django-views django-urls

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

但是在连接models-serializers-views-urls方面,我只是不知道如何使它工作...

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

  1. 聚会
  2. 人们
  3. 食物

스크린샷, 2019-04-30 13-41-40

因此,id a b c d e 1 2 1 0 0 0 2 1 1 1 1 1 3 2 0 1 0 0 Party具有ManyToMany关系,与People具有OneToMany关系。当我到达Food之类的网址时,那么我想从给定的参与者ID中获取特定人的信息。

这是我的代码。

models.py

/party_id/people_id

serializers.py

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)

views.py

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

urls.py

这是我迷路的部分

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

因此,如果我到达#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()), ] ,我想查看参加者(其par_id为1)的个人信息(其peo_id为3)。对于食物,它也是一样。

我应该在website/party/1/3中开设新课程来使其正常工作吗?但是,如果我使用PartyList视图类,那么如何才能同时检查views.pypar_id的网址呢?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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)