我有一个关于处理m2m /通过模型及其在django rest框架中的表示的问题.我们来看一个经典的例子:
models.py:
from django.db import models
class Member(models.Model):
name = models.CharField(max_length = 20)
groups = models.ManyToManyField('Group', through = 'Membership')
class Group(models.Model):
name = models.CharField(max_length = 20)
class Membership(models.Model):
member = models.ForeignKey('Member')
group = models.ForeignKey('Group')
join_date = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)
serializers.py:
imports...
class MemberSerializer(ModelSerializer):
class Meta:
model = Member
class GroupSerializer(ModelSerializer):
class Meta:
model = Group
Run Code Online (Sandbox Code Playgroud)
views.py:
imports...
class MemberViewSet(ModelViewSet):
queryset = Member.objects.all()
serializer_class = MemberSerializer
class GroupViewSet(ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
Run Code Online (Sandbox Code Playgroud)
在获取成员实例时,我成功接收了所有成员的字段及其组 - 但是我只获得了组的详细信息,而没有来自成员模型的额外详细信息.
换句话说,我希望收到:
{ …Run Code Online (Sandbox Code Playgroud) 该模型定义了Article和Author类。它们以多对多的关系链接在一起。此关系是通过自定义中介表定义的:
# models.py
class Article(models.Model):
title = models.CharField(max_length=500)
authors = models.ManyToManyField(Author, through='AuthorOrder')
class Author(models.Model):
name = models.CharField(max_length=255)
class AuthorOrder(models.Model):
author = models.ForeignKey(Author)
article = models.ForeignKey(Article)
writing_order = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
序列化应返回如下JSON:
#articles_json
{"fields":
{
"title": "A title",
"authors": [
{
"name":"Author 1",
"writing_order": 1
},
{
"name":"Author 2",
"writing_order": 2
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我确定了两种解决方案。
我尝试了两者,但没有成功。您知道另一种方法吗?