Создав объект он нуждался в том, чтобы получить следующий response:
{
"id":53,
"cantidad":2,
"obra":1,
"compra":5,
"detalle": {
"id": 1,
"cantidad": 15,
"asignados": 2,
"pendientes": 13
}
}
Со следующими serializer я получаю следующее:
class DetalleOrdenSerializer(serializers.ModelSerializer):
class Meta:
model = DetalleOrden
fields = ('id', 'cantidad', 'asignados', 'pendientes',)
class DetalleCompraSerializer(serializers.ModelSerializer):
detalle = DetalleOrdenSerializer(many=True, read_only=True)
class Meta:
model = DetalleCompra
fields = ('id', 'cantidad', 'obra', 'compra', 'detalle',)
Результат:
{
"id":53,
"cantidad":2,
"obra":1,
"compra":5,
"detalle":1
}
Но если я использую следующие serializer, чтобы получать response, в котором я нуждаюсь, я получаю следующую ошибку:
class DetalleOrdenSerializer(serializers.ModelSerializer):
class Meta:
model = DetalleOrden
fields = ('id', 'cantidad', 'asignados', 'pendientes',)
class DetalleCompraSerializer(serializers.ModelSerializer):
detalle = DetalleOrdenSerializer(many=True, read_only=True)
class Meta:
model = DetalleCompra
fields = ('id', 'cantidad', 'obra', 'compra', 'detalle',)
Ошибка:
null value in column "detalle_id" violates not-null constraint
DETAIL: Failing row contains (54, 2, 5, null, 1).
В обоих случаях это json, который я использую в request:
{
compra: "5",
obra: "1",
detalle: "1",
cantidad: "2"
}
И это модели:
class DetalleOrden(models.Model):
orden = models.ForeignKey(Orden, related_name='ordenes')
producto = models.ForeignKey(Producto)
cantidad = models.PositiveIntegerField(validators=[MinValueValidator(1)])
precio_unidad = models.IntegerField(validators=[MinValueValidator(0)])
total = models.IntegerField(validators=[MinValueValidator(0)])
asignados = models.IntegerField(validators=[MinValueValidator(0)], default=0, editable=False)
pendientes = models.IntegerField(validators=[MinValueValidator(0)], default=0, editable=False)
class DetalleCompra(models.Model):
compra = models.ForeignKey(Compra)
obra = models.ForeignKey(Obra)
detalle = models.ForeignKey(DetalleOrden, related_name="detalles")
cantidad = models.IntegerField(validators=[MinValueValidator(1)])
Я остаюсь внимательным к Вашим комментариям, привету.
Хорошо первое, что у тебя есть, что знание состоит в том, что Ты должен Последовательно преобразовывать каждую связь из-за отдельно, потом добавлять depth = 1 к class Поместило:
class DetalleOrdenSerializer(serializers.ModelSerializer):
class Meta:
model = DetalleOrden
fields = ('id', 'cantidad', 'asignados', 'pendientes',)
class DetalleCompraSerializer(serializers.ModelSerializer):
detalle = DetalleOrdenSerializer()
class Meta:
model = DetalleCompra
fields = '__all__'
depth = 1
PD: Если связь внизу, оно не функционирует, я не знаю, из-за которого, ты не беспокоился, так будь хорошо, но он переместил меня этот редкий случай
Уже ты проверил документацию DRF? HyperlinkedModelSerializer
Для типа связей наследства они представляются используя этот serializador. В меня оно я функционировало правильно, но он в наследстве.
Здесь есть больше информации: Relationships и Иперлинкед АПИС
serializer, как Nested relationships, не состоит escribible назначено по умолчанию asГ - в том, что ты должен повторно определять mГ©todo .create()
, ты должен снимать read_only=true
в DetalleOrdenSerializer
В модели ты заявляешь в related_name='detalles'
, это признак, который ты, должно быть, используешь в твоем serializador, и не подробно описывайте, измени деталь тебя последовательно преобразовывать из-за деталей. ++