我有一个基础数据库表的Django(1.8)模型,它有多个逻辑上是固定大小数组的列。例如:
instance = Widget.objects.get(...)
for description in instance.descriptions:
# do something with each description
我希望能够访问这些列,就像它们是模型实例上的集合一样,例如:
descriptions
我的主要动机是通过Django Rest Framework(DRF)公开此模型,并希望API客户端能够轻松枚举与模型关联的class WidgetSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Widget
。就目前而言,客户端必须手动引用每个逻辑“索引”,这会使代码重复。
我的DRF序列化程序代码目前是这样的:
descriptions
每个Widget
都有固定数量的{{1}},它们的排序非常重要。
是否有一种干净的方法可以将这些字段作为模型对象上的集合公开?
答案 0 :(得分:0)
这非常简单,只需向Model类添加一个方法,将方法作为序列返回,然后(对于API客户端),手动将新方法指定为field
进行序列化。
因此模型定义变为:
from django.db import models
class Widget(models.Model):
description_1 = models.CharField(max_length=255)
description_2 = models.CharField(max_length=255)
description_3 = models.CharField(max_length=255)
def descriptions(self):
return self.description_1, self.description_2, self.description_3
DRF序列化程序更新如下:
class WidgetSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Widget
fields = ('url', 'descriptions',)
这会导致API返回descriptions
的JSON数组,并省略所有单个description_x
字段。