【问题标题】:Django rest nested child serializer (having reverse relation) list creationDjango rest嵌套子序列化器(具有反向关系)列表创建
【发布时间】:2020-12-29 17:20:38
【问题描述】:

我是 django rest 的新手,目前正在使用序列化程序来处理对象的嵌套创建 ModelB是要创建其实例的对象,它与modelC有反向关系,与modelA有直接关系

ModelA 在创建期间必须获取并传递给 ModelB ModelC 列表将与 ModelB 一起创建

型号

class ModelA(TimeStampMixin, CoordinateMixin):
    name = models.CharField(max_length=150)


class ModelB(TimeStampMixin):
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
    modelA = models.ForeignKey(
        ModelA,
        on_delete=models.PROTECT,
        related_name='modela_reverse'
    )



class ModelC(TimeStampMixin):
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
    modelB = models.ForeignKey(ModelB, on_delete=models.CASCADE, related_name='modelb_reverse')
    modelD = models.ForeignKey(ModelD, on_delete=models.CASCADE, related_name='modelD_reverse')
    
class ModelD(TimeStampMixin):

    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
    name = models.CharField(max_length=50)

序列化器:

class ModelDSerializer(serializers.ModelSerializer):
 
    class Meta:
        model = ModelD
        fields = ['name', 'uuid']
 

class ModelCSerializer(serializers.ModelSerializer):
    modeld = ModelDSerializer(many=False)

    class Meta:
        model = ModelC
        fields = ['modeld', 'quantity']


class ModelA(serializers.ModelSerializer):
    class Meta:
        model = ModelA
        fields = ['name', 'uuid']
        read_only_fields = ['name']

    def to_internal_value(self, data):
        modelA = ModelA.objects.get(**data)
        return modelA


class ModelB(serializers.ModelSerializer):    
     modelb_reverse = ModelCSerializer(many=True)
     modelA = ModelASerializer(many=False)

    class Meta:
        model = ModelB
        fields = ['modelb_reverse', 'modelA']
    

到目前为止,当仅包含嵌套 modelA 时,我已经能够通过其序列化程序创建 ModelB,但我坚持以某种方式修改解决方案以包括通过嵌套 ModelCSerializer 创建反向对象

我正在寻找一种优雅的方式来实现这一点,并且已经在这里停留了一段时间 非常感谢一些帮助 提前致谢

【问题讨论】:

标签: django api django-models django-rest-framework django-serializer


【解决方案1】:

您可以覆盖 ModelB 序列化程序的 create 方法来创建反向对象。检查一下:https://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 2017-03-12
    • 1970-01-01
    • 2017-07-28
    • 2015-11-09
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    相关资源
    最近更新 更多