【问题标题】:Django Rest Framework, many to many groupsDjango Rest Framework,多对多组
【发布时间】:2017-05-15 15:59:58
【问题描述】:

我是使用 DRF 的新手。我有一个 2 层的多对多关系,我希望能够提供服务。

# models.py
class Person(models.Model):
    name = models.CharField(max_length=32)
class Group (models.Model):
    name = models.CharField(max_length=32)
    people = models.ManyToManyField(Person,related_name='groups',blank=True)
class Event(models.Model):
    name = models.CharField(max_length=32)
    groups = models.ManyToManyField(Group,related_name='events',blank=True)

在我的序列化程序中,我希望能够在 Person 中显示他们正在参加的活动。

class PersonSerializer(serializers.ModelSerializer):
    groups = serializers.StringRelatedField(many=True)
    #not sure how to lookup the events related field here...
    events = EventSerializer(source='groups.name', many=True,read_only=True)

    class Meta:
        model = Person
        fields = ('name', 'events')

但是,我在查找事件时遇到了错误。这种查找甚至可能吗?

目前的输出如下所示:

{
    "id": 1,
    "name": "mike",
    "groups": [
        "dev"
    ],
    "events": null
}

我希望输出是事件列表。

【问题讨论】:

    标签: python django django-models django-rest-framework


    【解决方案1】:

    我不知道这是否有效,

    class EventSerializer(serializers.ModelSerializer):
    
        class Meta:
            Model = Event
            fields = ('name')
    
    class GroupSerializer(serializers.ModelSerializer):
        events = EventSerializer(many=True, read_only=True)
        class Meta:
            model = Group
            fields = ('name', 'events')
    

    然后,更新 PersonSerializer,

    class PersonSerializer(serializers.ModelSerializer):
        groups = GroupSerializer(many=True, read_only=True)
        class Meta:
            model = Person
            fields = ('name', 'groups')
    

    【讨论】:

    • 我收到一个错误:AssertionError:在序列化程序“MemberSerializer”中的字段“ListSerializer”上指定source='groups' 是多余的,因为它与字段名称相同。删除 source 关键字参数。
    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2019-11-20
    • 2018-07-28
    • 2020-08-15
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多