即使required=False,Django REST Framework序列化程序字段也是必需的



我有一个类似的模型

class FalseUserAnswer(BaseModel):
question = models.ForeignKey(TrueOrFalseQuestion, on_delete=models.CASCADE)
user_question = models.ForeignKey(TrueOrFalseUserQuestion, on_delete=models.CASCADE, null=True)
answer = models.ForeignKey(FalseAnswer, on_delete=models.CASCADE)

问题是我的前端的一个旧版本不发送CCD_ 1,而新版本发送。因此,我想接受一个根本没有字段的对象(它不会为null、None或nothing,只是不在请求中(。

我试着在我的序列化程序中做这样的事情

class FalseUserAnswerSerializer(serializers.ModelSerializer):
# Allows null for version < 1.18 of the app. Might be removed in the future.
user_question = serializers.PrimaryKeyRelatedField(queryset=TrueOrFalseUserQuestion.objects.all(), required=False, allow_null=True)
class Meta:
model = FalseUserAnswer
fields = ['id', 'creator', 'question', 'user_question', 'answer', 'type']

但我还是有

"error": {
"user_question": [
"This field is required."
]
}

Django REST框架版本是3.8.2

感谢您的帮助,谢谢您抽出时间。

我阅读了源代码,显然为了获得我想要的行为,我必须将默认值设置为None。这没有意义,因为我相信一旦我说required=False(并且数据库字段应该用NULL填充(,它就会是回退值。

所以之前我的代码是

user_question = serializers.PrimaryKeyRelatedField(queryset=TrueOrFalseUserQuestion.objects.all(), required=False, allow_null=True)

工作版本为

user_question = serializers.PrimaryKeyRelatedField(queryset=TrueOrFalseUserQuestion.objects.all(), required=False, allow_null=True, default=None) 

相关内容

最新更新