Django Модель verbose_name как имена ответов строк API

Поскольку я не могу сохранять специальные символы в полях в модели django, мне приходится обходить это. Например: Я хотел бы иметь поле "km/h". Поэтому я использую его следующим образом:

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 so:

{
 "km/h":10
}

Как я могу это сделать? У меня около 30 таких полей со специальными символами

Вы можете определить имена полей со специальными символами, обновляя 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']
Вернуться на верх