簡體   English   中英

DRF序列化器深度使創建時忽略字段

[英]DRF serializer depth makes fields ignored on create

(項目在github上存在該問題)

由於某些原因,序列化程序的depth選項使字段在創建時被忽略。

串行:

class AnswerSerializer(serializers.ModelSerializer):

    class Meta:
        model = Answer
        fields = ('question', 'body',)
        depth = 1

視圖:

class AnswerList(ListCreateAPIView):
    queryset = Answer.objects.all()
    serializer_class = AnswerSerializer

當我嘗試創建depth = 1的答案時,我得到NOT NULL constraint failed: forum_answer.question_id ,但是當我注釋掉depth = 1一切正常。 但是,當然,我沒有完整的Question對象,只有它的pk

在這里找到了更好的解決方案

現在,序列化器如下所示:

class AnswerSerializer(serializers.ModelSerializer):
    question_pk = serializers.PrimaryKeyRelatedField(
        queryset=Question.objects.all(), source='question', write_only=True
    )

    class Meta:
        model = Answer
        fields = ('question', 'question_pk', 'body',)
        depth = 1

PS。 致力於github的項目。

重要提示:我認為這種方法非常不安全,因為任何人都可以編輯嵌套對象。

您可以將drf-writable-nested用於此類功能。 如果有人需要,請在github上更新項目

PS。 如果您不希望創建嵌套對象,請確保對嵌套對象使用“ pk”字段。

class DemoSerializer(serializers.ModelSerializer):
def __init__(self, instance=None, data=empty, **kwargs):
    if instance:
        setattr(self.Meta, 'depth', 1)
    else:
        setattr(self.Meta, 'depth', 0)
    super(DemoSerializer, self).__init__(instance, data, **kwargs)

class Meta:
    model = Demo
    fields = '__all__'
    depth = 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM