【发布时间】: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 创建反向对象
我正在寻找一种优雅的方式来实现这一点,并且已经在这里停留了一段时间 非常感谢一些帮助 提前致谢
【问题讨论】:
-
您可以使用drf-writable-nested mixins 创建子实体。
标签: django api django-models django-rest-framework django-serializer