在DRF中创建多对多记录

时间:2016-03-11 17:53:58

标签: django django-models many-to-many django-rest-framework

我是Django的新手,我试图了解Django Rest Framework的工作。我没有得到的并且我一直试图找出如何在DB中创建具有多对多关系的新记录。我可以阅读它并在JSON中检索它但我无法创建或修改它。 Django为我创建了一个索引表,但我不知道如何使用它。 〔实施例: 我有一个用户和用户标签。每个用户可以拥有更多标签,每个标签可以分配给更多用户。

class User(AbstractBaseUser, PermissionsMixin):
    category_tags = models.ManyToManyField(CategoryTag, blank=True, null=True)

什么样的串行器以及我应该如何编写序列化器,以便为用户分配一些标签。例如,当注册新用户时,在注册期间他将选择一些将被分配给他的标签。 我可以创建一个新用户,但我不能使用m2m(写)。

非常感谢。

1 个答案:

答案 0 :(得分:1)

我假设您在JSON中发布了类别ID列表。然后,您可以将create方法调整为:

 def create(self, validated_data):
    generated_password = get_random_string(length=8)

    user = User.objects.create(
        email = validated_data['email'],
        full_name = validated_data['full_name']
    )

    user.set_password(generated_password)
    user.save()

    # loop over Categories and add many to many relationship
    for cat_id in validated_data('category_tags'):
        category = Category.objects.get(id=cat_id)
        user.category_tags.add(category)
    user.save()

    return user

您的JSON应该与此类似:

{
    "email": "some@mail.de",
    ... //other user fields
    "category_tags": [3, 12, 16]
}