Django 在查询集中添加一个字段

Posted

技术标签:

【中文标题】Django 在查询集中添加一个字段【英文标题】:Django add a field in a queryset 【发布时间】:2018-05-25 03:07:27 【问题描述】:

我有一个查询集,其中包含在 Bar 模型中定义的名为“foo”的字段。

result = Bar.objects.values('foo').distinct()

我想返回一个包含 'foo' 和 'foo' 的 slug 版本的查询集。

如何在我的 Bar 模型中不创建新字段的情况下做到这一点?

【问题讨论】:

即使这是可能的,您也可能需要向模型添加一个新字段。例如,如果您在 URL 中使用 slug,那么您需要添加该字段以便您可以通过 slug 查找。 但我必须在 6 个字段上做到这一点。它会占用我的磁盘太多空间(因为我在这个字段上做了一个不同的操作,因为有 10 个不同的值) 真的吗?你真的有如此巨大的有限磁盘空间吗? 不,但我将存储 6 个字段,这显然不是这样做的好方法。我正在尝试在序列化时使用 django rest 框架解决这个问题。 【参考方案1】:

解决方案正在使用 DRF:Django REST Framework: adding additional field to ModelSerializer

对我来说:

class BarSerializer(serializers.ModelSerializer):
    slug = serializers.SerializerMethodField('slug_field')

    @staticmethod
    def slug_field(bar):
        return slugify(bar['foo'])

    class Meta:
        model = Indicateur
        fields = ('foo', 'slug',)

【讨论】:

以上是关于Django 在查询集中添加一个字段的主要内容,如果未能解决你的问题,请参考以下文章

姜戈。如何在查询结果中添加字段?

在 django 的查询集中获取对象的计数

在Django的查询集中总结一个字段

Django:更改查询集中所有对象的字段值

Django Newbie - 使用多字段表单,如何消除查询集中的空字段

Django在查询集结果上添加附加字段[重复]