我有一个类似的模型
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)