即使Required = False,也需要Django REST Framework序列化程序字段

时间:2018-07-19 15:02:27

标签: django 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)

问题是我的前端的一个旧版本不发送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

感谢您的帮助。

1 个答案:

答案 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)