相关疑难解决方法(0)

Django Rest Framework - 如何在序列化器中嵌套多个字段?

我有几个基本模型,有几个控制字段.其中,位置字段由lat,lon,准确度,提供者和客户端时间组成.我的大多数可写模型(以及资源​​)都是从这个基础模型继承而来的.

我正在尝试让DRF在嵌套的"位置"字段中序列化与位置相关的字段.例如,

{
 "id": 1, 
 "name": "Some name",
 "location": { 
   "lat": 35.234234, 
   "lon": 35.234234,
   "provider": "network", 
   "accuracy": 9.4, 
 }
}
Run Code Online (Sandbox Code Playgroud)

重要的是要记住这些字段是基本模型上的常规(平面)字段.

我调查过,发现了几个选择

  1. 创建自定义字段,并通过覆盖"get_attribute"创建嵌套表示.我不喜欢这个解决方案,因为我失去了模型序列化器的一些好处,例如验证.

  2. 创建名为Location的嵌套资源.我想我可以通过在模型上添加相同名称的属性来使其工作,但同样,没有验证.

所以我的问题是,在DRF序列化器中嵌套(或分组)多个字段的最佳方法什么?

DRF 3.0.0,Django 1.7

编辑:

建立在@Tom Christie之上回答这是我提出的(简化)

# models.py
class BaseModel(models.Model):
  id = models.AutoField(primary_key=True)
  lat = models.FloatField(blank=True, null=True)
  lon = models.FloatField(blank=True, null=True)
  location_time = models.DateTimeField(blank=True, null=True)
  location_accuracy = models.FloatField(blank=True, null=True)
  location_provider = models.CharField(max_length=50, blank=True, null=True)

  @property
  def location(self):
    return {
      'lat': self.lat,
      'lon': self.lon,
      'location_time': self.location_time,
      'location_accuracy': self.location_accuracy,
      'location_provider': self.location_provider
    }

class ChildModel(BaseModel): …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

11
推荐指数
1
解决办法
2345
查看次数

标签 统计

django ×1

django-rest-framework ×1