python - DRF3 在 m2m 关系上创建嵌套序列化器

标签 python django django-rest-framework

我有一个用户模型和一个音乐会模型。 Concert 模型有一个到用户模型的 m2m 字段。在 Concert View 中,我想要一个与 Concert 模型相关的用户词典列表。这就是我得到的:

models.py

class User(AbstractBaseUser, PermissionsMixin):
    objects = UserManager()
    name = models.CharField(max_length = 255, default = "")
    date_added = models.DateField(auto_now=False, auto_now_add=True)
    email = models.EmailField(unique=True, db_index=True)
    (more but irrelevant)

class Concert(models.Model):
    name = models.CharField(max_length = 255)
    technicians = models.ManyToManyField(User)

序列化器.py

class ConcertListSerializer(serializers.ModelSerializer):
    technicians = UserDetailSerializer(
            many=True,
            read_only=True,
            source='concert_set'
        )

    class Meta:
        model = models.Concert
        fields = [
            'name',
            'technicians',
            'id',
        ]

class UserDetailSerializer(ModelSerializer):
    class Meta:
        model = User
        fields = [
            'name',
            'email',
            'id',
        ]

我期望 ConcertListSerializer 中的技术人员字段是包含用户姓名、电子邮件和 ID 的字典列表。为什么它不提供像 DRF Documentation on Nested Serializers 这样的功能?说会..?

最佳答案

为什么添加source您使用与模型字段相同的序列化器字段,只需将其删除即可。

class ConcertListSerializer(serializers.ModelSerializer):
    technicians = UserDetailSerializer(
            many=True,
            read_only=True,
        )

关于python - DRF3 在 m2m 关系上创建嵌套序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46561844/

相关文章:

python - 自定义渲染器破坏站点

Django POST 方法单元测试失败,出现 Assertionerror 401

python - 是否可以使用类似缓冲区(基于指针)的字符串比较在 python 3 中进行排序?

python - Django:如何在django.db.models.query QuerySet中重载Q以用于我的Manager中的特殊用途

python - Django,在模板中创建变量并赋值

python - Django 1.6 : How to access static files in view

django - 在 RESTfull 资源中按所有者过滤项目的最佳实践

python - 广播从矩阵创建的子张量(Theano)

python - 在元组中插入项目

python - to_sql pandas 方法改变了 sqlite 表的方案