DRF:使用主键数组反向分配外键

2024-04-26 09:53:58 发布

您现在位置:Python中文网/ 问答频道 /正文

this问题所述

With Django REST Framework, a standard ModelSerializer will allow ForeignKey model relationships to be assigned or changed by POSTing an ID as an Integer.

我正在尝试更新以下格式的反向关系:

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'。在

是否可以通过发布主键数组来分配或更改反向关系?在


Tags: nameantruemodel关系modelsquizclass
2条回答

在序列化程序中不需要特殊字段,DRF序列化程序足够聪明,可以从fields值中找出相关字段。在

class LessonSerializer(serializers.ModelSerializer):

    class Meta:
        model = Lesson
        fields = ('quizzes', 'name')

你应该传递id的列表,如果只有一个值,它应该是一个列表。在

要解决这个问题,您需要先创建一个测试实例,然后再将其分配给课程。下面是对代码的一个小改动。在

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')


使用with测验创建帖子请求,然后再次运行帖子

相关问题 更多 >