如this问题
中所述使用Django REST Framework,标准ModelSerializer将允许通过将ID作为整数进行POST来分配或更改ForeignKey模型关系。
我正在尝试更新以下格式的反向关系:
class Lesson(models.Model):
name = models.TextField()
class Quiz(models.Model):
lesson = models.ForeignKey(Lesson, related_name='quizzes', null=True)
class LessonSerializer(serializers.ModelSerializer):
quizzes = serializers.PrimaryKeyRelatedField(queryset=Quiz.objects.all(), many=True, write_only=True)
class Meta:
model = Lesson
fields = ('quizzes')
使用LessonSerializer
发布包含测验主键数组的更新时,我得到TypeError: 'Quiz' instance expected, got '1'
。
是否可以通过POST主键数组来分配或更改反向关系?
答案 0 :(得分:0)
您不需要在串行器中使用特殊字段,DRF序列化器足够聪明,可以从fields
值中找出相关字段。
class LessonSerializer(serializers.ModelSerializer):
class Meta:
model = Lesson
fields = ('quizzes', 'name')
你应该传递id列表,如果只有一个值,它应该是一个列表。
答案 1 :(得分:0)
要解决此问题,您需要先创建一个Quiz实例,然后再将其分配给Lesson。以下是您的代码的一个小改动。
class Lesson(models.Model):
name = models.TextField()
class Quiz(models.Model):
lesson = models.ForeignKey(Lesson, related_name='quizzes', null=True)
class LessonSerializer(serializers.ModelSerializer):
quizzes = serializers.PrimaryKeyRelatedField(queryset=Quiz.objects.all(), many=True, write_only=True)
class Meta:
model = Lesson
fields = ('quizzes')
class QuizSerializer(serializers.ModelSerializer):
class Meta:
model = Quiz
fields = ('name')
使用测验创建POST请求,然后再次运行您的帖子