相关疑难解决方法(0)

在Django Rest Framework中的响应中包含中介(通过模型)

我有一个关于处理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)

python django django-rest-framework

96
推荐指数
2
解决办法
2万
查看次数

Django:序列化带有通过参数的多对多关系的模型

该模型定义了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)

我确定了两种解决方案。

我尝试了两者,但没有成功。您知道另一种方法吗?

django serialization

5
推荐指数
1
解决办法
1664
查看次数