我的模型:
class Course(models.Model):
...
course_tags = models.ManyToManyField(CourseTag, related_name='course_tags', blank=True)
...
我的序列化器:
class CourseSerializer(serializers.ModelSerializer):
...
course_tags = CourseTagsSerializer(many=True, required=False)
...
class Meta:
model = Course
fields = [...'course_tags'...]
def create(self, validated_data):
...
tags_data = validated_data.pop('tags', None)
...
course, _ = Course.objects.create(
author=author, **validated_data)
if tags_data:
for tag in tags_data:
new_tag, _ = CourseTag.get_or_create(title=tag.get('title'))
course.course_tags.add(new_tag.id)
course.save()
我正在向這個序列化程式發送 POST 請求。回復:
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use course_tags.set() instead.
我嘗試了作業方法,但是我的代碼不起作用。
uj5u.com熱心網友回復:
欄位是名稱course_tags,因此當您從經過驗證的資料中獲取標簽時應使用此名稱:
def create(self, validated_data):
...
tags_data = validated_data.pop('course_tags', None)
否則course_tags仍然存在validated_data并Course.objects.create()引發錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412662.html
標籤:
上一篇:Django更改密碼
