[英]DRF serializer depth makes fields ignored on create
由於某些原因,序列化程序的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
重要提示:我認為這種方法非常不安全,因為任何人都可以編輯嵌套對象。
您可以將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.