Как получить данные, связанные с внешним ключом в django rest framework?

Я должен назначить встречу для события, моя модель выглядит следующим образом -

Событие /models.py

class Event(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    event_name = models.CharField(max_length=200)
    event_location = models.CharField(max_length=200, default='')

Назначение /models.py

class Appointment(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    appointment_date = models.DateTimeField(default=datetime.datetime.now)

И назначение сериализатора -

Назначение /serializers.py

class AppointmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Appointment
        fields = ('id', 'event', 'appointment_date')

Я могу создать назначение следующим образом -

POST appointment

request params -
    event:6625dc74-dc36-4a22-9fac-c63e96fe6049
    appointment_date:2017-06-26 18:30:00


response
    {
      "id": "08c975bc-c4d8-4e90-a4b2-bdb2cd69e9e8",
      "event": "6625dc74-dc36-4a22-9fac-c63e96fe6049",
      "appointment_date": "2017-06-26 18:30:00"
    }

Но мне нужно событие как объект события, а не строка с идентификатором события, например:

[
  "id": "08c975bc-c4d8-4e90-a4b2-bdb2cd69e9e8",
  "event": {
        "id": "6625dc74-dc36-4a22-9fac-c63e96fe6049",
        "event_name": "Test Event",
        "event_location": "TVM, IND"
  },
  "appointment_date": "2017-06-26 18:30:00"
]

1 ответ

Решение

В вашем сериализаторе класс определите depth=1

Итак, ваш сериализатор будет:

class AppointmentSerializer(serializers.ModelSerializer):
class Meta:
    model = Appointment
    fields = ('id', 'event', 'appointment_date')
    depth = 1
Другие вопросы по тегам