如何为 ManyToManyField 使用 Django DRF 序列化程序
How to use the Django DRF serializer for ManyToManyField
我正在尝试为我的模型编写一个序列化程序,它有一个 ManyToManyField。我的问题似乎非常 ,但此时我对使用 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 会创建一个评估对象,其中我已经有两个 Objective 对象,id 分别为 3 和 4。
{
"name": "Quiz 3",
"objective": [
3,
4
]
}
但是,这会创建评估对象,但它与 Objective 之间没有 link。
{
"name": "Quiz 3",
"date_completed": "2020-03-17",
"objective": []
}
是我的序列化程序不正确,还是我对 POST 使用了错误的语法,还是存在其他问题?
您已在 objective
字段中设置 read_only=True
--(drf doc)。如果您将字段设置为 read_only
,DRF 将不会接受输入数据。
class AssessmentSerializer(serializers.ModelSerializer):
objective = serializers.PrimaryKeyRelatedField(many=True, <b><strike>read_only=True</strike>, queryset=Objective.objects.all()</b>)
class Meta:
model = Assessment
fields = ['name', 'date_completed', 'objective']
我正在尝试为我的模型编写一个序列化程序,它有一个 ManyToManyField。我的问题似乎非常
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 会创建一个评估对象,其中我已经有两个 Objective 对象,id 分别为 3 和 4。
{
"name": "Quiz 3",
"objective": [
3,
4
]
}
但是,这会创建评估对象,但它与 Objective 之间没有 link。
{
"name": "Quiz 3",
"date_completed": "2020-03-17",
"objective": []
}
是我的序列化程序不正确,还是我对 POST 使用了错误的语法,还是存在其他问题?
您已在 objective
字段中设置 read_only=True
--(drf doc)。如果您将字段设置为 read_only
,DRF 将不会接受输入数据。
class AssessmentSerializer(serializers.ModelSerializer):
objective = serializers.PrimaryKeyRelatedField(many=True, <b><strike>read_only=True</strike>, queryset=Objective.objects.all()</b>)
class Meta:
model = Assessment
fields = ['name', 'date_completed', 'objective']