Django) 如何在 ManyToMany, OneToMany 关系中连接 urls-views-models
Django) How to connect urls-views-models in ManyToMany, OneToMany relationship
我制作了一些具有 ManyToMany、OneToMany 关系的模型,然后我尝试在 views.py 中制作适当的 class,以便可以看到与所选模型相关的子模型。
但是在连接模型-序列化器-视图-urls 方面,我只是不知道如何让它工作...
所以,我想做的是:(简化)
共有3个型号。
- 聚会
- 人
- 食物
因此 Party
与 People
具有多对多关系,与 Food
具有一对多关系。当我像 /party_id/people_id
一样达到 url 时,我想从给定的派对 ID 中获取特定人员的信息。
这是我的代码。
models.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)
serializers.py
class PartySerializer(serializers.ModelSerializer):
class Meta:
model = Party
fields = ('par_id', 'par_people')
# People, Food has same structure...
views.py
class PartyList(generics.ListAPIView):
queryset = Party.objects.all()
serializer_class = PartySerializer
# People, Food has same structure...
urls.py
这是我迷路的部分
#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
中创建新的 class 才能使其正常工作?但是,如果我使用 PartyList 视图 class,url 如何同时检查 par_id
和 foo_id
?任何帮助将不胜感激。
我认为这样的事情应该可行。如果使用 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)
我制作了一些具有 ManyToMany、OneToMany 关系的模型,然后我尝试在 views.py 中制作适当的 class,以便可以看到与所选模型相关的子模型。
但是在连接模型-序列化器-视图-urls 方面,我只是不知道如何让它工作...
所以,我想做的是:(简化) 共有3个型号。
- 聚会
- 人
- 食物
因此 Party
与 People
具有多对多关系,与 Food
具有一对多关系。当我像 /party_id/people_id
一样达到 url 时,我想从给定的派对 ID 中获取特定人员的信息。
这是我的代码。
models.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)
serializers.py
class PartySerializer(serializers.ModelSerializer):
class Meta:
model = Party
fields = ('par_id', 'par_people')
# People, Food has same structure...
views.py
class PartyList(generics.ListAPIView):
queryset = Party.objects.all()
serializer_class = PartySerializer
# People, Food has same structure...
urls.py
这是我迷路的部分
#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
中创建新的 class 才能使其正常工作?但是,如果我使用 PartyList 视图 class,url 如何同时检查 par_id
和 foo_id
?任何帮助将不胜感激。
我认为这样的事情应该可行。如果使用 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)