如何在 django rest 框架中获取与外键相关的数据?

Posted

技术标签:

【中文标题】如何在 django rest 框架中获取与外键相关的数据?【英文标题】:How to get data related to a foreign key in django rest framework? 【发布时间】:2017-08-19 21:28:43 【问题描述】:

我要为一个活动创建一个约会,我的模型如下-

事件/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)

约会序列化器是 -

约会/序列化器.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 字符串,比如 -

[
  "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"
]

【问题讨论】:

How do I include related model fields using Django Rest Framework?的可能重复 这已记录在DRF docs - Serializer relations 【参考方案1】:

在您的序列化程序类中定义depth=1

所以你的序列化器将是:

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

【讨论】:

感谢您的回复。在添加深度 = 1 时,POST 数据中缺少事件。请注意,我将事件 ID 作为 POST 参数传递。即,事件:6625dc74-dc36-4a22-9fac-c63e96fe6049

以上是关于如何在 django rest 框架中获取与外键相关的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在序列化程序 django rest 框架中为外键设置源

在 Django 模型中存储与外键关联的数据

当父记录存在时,如何在 django rest 框架的子序列化程序中设置外键值

在 django rest 框架中访问算术的外键属性

Django REST框架外键和过滤

RestKit 对象映射与外键和服务