在 DRF 中为多对多创建记录
Create a record for many-to-many in DRF
我是 Django 的新手,我正在尝试了解如何使用 Django Rest Framework。我没有得到并且我一直试图找出的是如何在具有多对多关系的数据库中创建新记录。我可以在 JSON 中阅读和检索它,但我无法创建或修改它。 Django 为我创建了一个 table 索引,但我不知道如何使用它。
例子:
我有一个用户和用户标签。每个用户可以有更多的标签,每个标签可以分配给更多的用户。
class User(AbstractBaseUser, PermissionsMixin):
category_tags = models.ManyToManyField(CategoryTag, blank=True, null=True)
什么样的序列化程序以及我实际上应该如何编写序列化程序以便我可以为用户分配一些标签。例如,当一个新用户注册时,他会在注册过程中选择一些分配给他的标签。
我可以创建新用户,但无法使用 m2m(写入)。
非常感谢。
我假设您 post 在您的 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]
}
我是 Django 的新手,我正在尝试了解如何使用 Django Rest Framework。我没有得到并且我一直试图找出的是如何在具有多对多关系的数据库中创建新记录。我可以在 JSON 中阅读和检索它,但我无法创建或修改它。 Django 为我创建了一个 table 索引,但我不知道如何使用它。 例子: 我有一个用户和用户标签。每个用户可以有更多的标签,每个标签可以分配给更多的用户。
class User(AbstractBaseUser, PermissionsMixin):
category_tags = models.ManyToManyField(CategoryTag, blank=True, null=True)
什么样的序列化程序以及我实际上应该如何编写序列化程序以便我可以为用户分配一些标签。例如,当一个新用户注册时,他会在注册过程中选择一些分配给他的标签。 我可以创建新用户,但无法使用 m2m(写入)。
非常感谢。
我假设您 post 在您的 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]
}