将多个类似的数据库字段公开为可枚举集合

时间:2015-12-16 17:38:45

标签: python django django-models django-rest-framework

我有一个基础数据库表的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}},它们的排序非常重要。

是否有一种干净的方法可以将这些字段作为模型对象上的集合公开?

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字段。