Django 模型 verbose_name 作为 API 行响应名称

发布于 2025-01-11 12:27:35 字数 552 浏览 0 评论 0原文

由于我无法在 django 模型的字段中保存特殊字符,因此我必须绕过它。 例如:我想要“公里/小时”字段。所以我使用它的方式如下:

class Unit(models.Model):
    kmh = models.FloatField(null=True, db_column='km/h', verbose_name='km/h')

然后我有示例序列化器:

class UnitSerializer(serializers.ModelSerializer):
     class Meta:
        model = Unit
        fields = ['kmh']

当我将它与包含该字段的 APIViews 响应一起使用时,它看起来像:

{
   "kmh":10,
}

我想让它看起来像我的 verbose_name 所以:

{
 "km/h":10
}

我该怎么做?我有大约 30 个带有特殊字符的字段。

As I can't save special characters in fields in django model I have to bypass it.
For example: I would like to have "km/h" field. So I'm using it like:

class Unit(models.Model):
    kmh = models.FloatField(null=True, db_column='km/h', verbose_name='km/h')

then I have example serializer:

class UnitSerializer(serializers.ModelSerializer):
     class Meta:
        model = Unit
        fields = ['kmh']

and when I'll use it with APIViews response which will include the field will look like:

{
   "kmh":10,
}

I would like to make it look like my verbose_name so:

{
 "km/h":10
}

How can I do it? I have like 30 of these fields with special characters.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

入画浅相思 2025-01-18 12:27:35

您可以通过更新 locals() 来定义具有特殊字符的字段名称,但我强烈建议不要这样做:在 Python 和 JavaScript 中、带有空格的变量名使得检索属性、更新数据等变得不太方便。在大多数编程语言和框架中,这只会让处理数据变得更糟。

您可以定义一个字段,并指定 source=... 参数来指定从何处检索数据:

class UnitSerializer(serializers.ModelSerializer):
    locals().update({
        'km/h': serializers.FloatField(source='kmh', allow_null=True)
    })
    
    class Meta:
        model = Unit
        fields = ['km/h']

You can define field names with special characters by updating the locals() but I would strongly advise not to do this: in both Python and JavaScript, variable names with spaces make it less convenient to retrieve attributes, update data, etc. In most programming languages and frameworks, this can only make it worse to process the data.

You can define a field, and specify the source=… parameter to specify where to retrieve the data from:

class UnitSerializer(serializers.ModelSerializer):
    locals().update({
        'km/h': serializers.FloatField(source='kmh', allow_null=True)
    })
    
    class Meta:
        model = Unit
        fields = ['km/h']
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文