Последовательно преобразовывать связь Джанго REST framework 3.3.1 с Джанго 1.8

Создав объект он нуждался в том, чтобы получить следующий 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)])

Я остаюсь внимательным к Вашим комментариям, привету.

1
задан 05.02.2016, 15:16
4 ответа

Хорошо первое, что у тебя есть, что знание состоит в том, что Ты должен Последовательно преобразовывать каждую связь из-за отдельно, потом добавлять 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: Если связь внизу, оно не функционирует, я не знаю, из-за которого, ты не беспокоился, так будь хорошо, но он переместил меня этот редкий случай

1
ответ дан 24.11.2019, 14:55

Уже ты проверил документацию DRF? HyperlinkedModelSerializer

Для типа связей наследства они представляются используя этот serializador. В меня оно я функционировало правильно, но он в наследстве.

Здесь есть больше информации: Relationships и Иперлинкед АПИС

0
ответ дан 24.11.2019, 14:55
  • 1
    я стараюсь использовать этот serializer sun documentaci и # 243; n DRF Nested relationships –  Marcelo 05.02.2016, 16:15
  • 2
    Какой serializador? Тот, который только что у тебя, он рекомендовал? –  SalahAdDin 06.02.2016, 11:30
  • 3
    Нет, тот факт, что est и # 225; в моем предыдущем комментарии. –  Marcelo 06.02.2016, 15:14
  • 4
    Оно ты не будет функционировать для связей for и # 225; neas, ты нуждаешься espec и # 237; ficamente тот, который ты recomend и # 233;. –  SalahAdDin 07.02.2016, 04:45

serializer, как Nested relationships, не состоит escribible назначено по умолчанию asГ - в том, что ты должен повторно определять mГ©todo .create(), ты должен снимать read_only=true в DetalleOrdenSerializer

0
ответ дан 24.11.2019, 14:55
  • 1
    Привет Дарвин, хотя твой ответ может быть правилен я приглашаю тебя тому, чтобы ты прочитал CГіmo, ответить для того, чтобы ты знал как podrí схвати улучшать твой ответ, lí neas có я говорю примера vendrí an хорошо с explicació n, привет! –  Bender Paisa 27.10.2017, 23:17

В модели ты заявляешь в related_name='detalles', это признак, который ты, должно быть, используешь в твоем serializador, и не подробно описывайте, измени деталь тебя последовательно преобразовывать из-за деталей. ++

-1
ответ дан 24.11.2019, 14:55