Django: как обрабатывать специальные символы в order_by - PullRequest
1 голос
/ 02 марта 2020

Мне нужно заказать django набор запросов по списку столбцов. Некоторые из них содержат символ минус, например IP-A.

Теперь Django жалуется на недопустимый аргумент (ы).

Как правильно обрабатывать столбцы с этими символами? Переименование столбцов не вариант, так как модель исправлена.

1 Ответ

0 голосов
/ 02 марта 2020

Обычно имена полей, которые используются Django, являются переменными, которые вы определяете в классах модели. Это, если вы не используете некоторые сложные трюки, действительные Python идентификаторы, и они не могут содержать дефис (-).

Можно использовать db_column=… параметр [Django -doc] для перевода имени полей в модели Django в разные имена столбцов в базе данных. Например:

class MyModel(models.Model):
    <b>ip_a</b> = models.CharField(max_length=128<b>, db_column='IP-A'</b>)

В ORM Django и почти во всех взаимодействиях с объектом модели, однако, имя столбца на стороне базы данных может рассматриваться как «техническая деталь». ORM работает с именем поля. Таким образом, вы можете сортировать объекты вашей модели с помощью:

MyModel.objects.order_by(<b>'ip_a'</b>)

ORM выполнит преобразование в столбцы реальной базы данных и, таким образом, отсортирует их за занавесами в столбце IP-A.

...