我有这样的模特
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)
问题是我的前端的一个旧版本不发送user_question
,而较新的版本却不发送。因此,我想接受一个完全没有字段的对象(它不会为null,或者为None或为空,只是不会出现在请求中)。
我试图在我的序列化器中做类似的事情
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
感谢您的帮助。
答案 0 :(得分:4)
我阅读了源代码,显然要获得所需的行为,我必须将默认值设置为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)