如何为ManyToManyField使用Django DRF序列化程序

问题描述 投票:0回答:1

我正在尝试为我的模型编写一个具有ManyToManyField的序列化器。我的问题似乎非常严重similar to this example,但目前我对使用SlugField并不感兴趣,但是我仍然不清楚我的问题是什么。

models.py

class Objective(models.Model):
    objective_name = models.CharField(max_length=10)
    objective_description = models.CharField(max_length=30)

    def __str__(self):
        return self.objective_name

class Assessment(models.Model):
    objective = models.ManyToManyField(Objective)
    date_completed = models.DateField(auto_now_add=True)

serializers.py

class AssessmentSerializer(serializers.ModelSerializer):
    objective = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Assessment
        fields = ['name', 'date_completed', 'objective']

class ObjectiveSerializer(serializers.ModelSerializer):
    class Meta:
        model = Objective
        fields = '__all__'

[从the DRF docs开始,我以为以下POST将创建一个评估对象,其中我已经有两个ID分别为3和4的Objective对象。

{
    "name": "Quiz 3",
    "objective": [
        3,
        4
    ]
}

但是,这会创建评估对象,但它与目标之间没有链接。

{
    "name": "Quiz 3",
    "date_completed": "2020-03-17",
    "objective": []
}

我的序列化程序是否正确,或者我对POST使用的语法错误,还是有其他问题?

django django-rest-framework django-serializer
1个回答
0
投票

您已在read_only=True字段中设置objective。如果将字段设置为read_only,则DRF将不接受输入数据。

class AssessmentSerializer(serializers.ModelSerializer):
    objective = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Assessment
        fields = ['name', 'date_completed', 'objective']
© www.soinside.com 2019 - 2024. All rights reserved.