相关疑难解决方法(0)

如何在django-rest中使用M2M关系

让我们从django文档中使用的关于M2M关系的模型开始,该模型使用through参数指向将充当中介的模型.

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __unicode__(self):
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, 
                                     through='Membership')

    def __unicode__(self):
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()

    class Meta:
        ordering = ['date_joined']
Run Code Online (Sandbox Code Playgroud)

现在假设我想为Group模型提供一个休息读写视图,该视图还包含每个组内的所有Person,按date_joined字段排序.我想获得的json序列化如下(成员只用他们的id描述):

{
    "id": 1, 
    "name": "U2", 
    "members": [
       20, 
       269, 
       134, 
       12,
    ]
}
Run Code Online (Sandbox Code Playgroud)

我写了一个序列化器:

class GroupSerializer(serializers.ModelSerializer):
    members = serializers.SlugRelatedField(source='membership_set', 
                                           many=True, 
                                           read_only=False,
                                           slug_field='person_id', 
                                           required=True)

    class Meta:
        model = Group
        fields = ('id', 'name', 'members')
Run Code Online (Sandbox Code Playgroud)

虽然对于读取操作它运行良好,但它不适用于写入.我应该如何定义序列化程序,以便在给定上面定义的序列化的情况下,它将继续:

  1. 创建组对象
  2. 将每个成员添加到组(通过创建Membership对象)

django-rest-framework

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

标签 统计

django-rest-framework ×1