Django:如何处理 order_by 中的特殊字符
Django: How to handle special chars in order_by
我需要按列列表对 Django 查询集进行排序。其中一些包含减号字符,如 IP-A。
现在 Django 抱怨参数无效。
使用这些字符处理列的正确方法是什么?重命名列不是一个选项,因为模型是固定的。
通常 Django 使用的字段名称是您在模型 类 中定义的变量。除非您使用一些复杂的技巧,否则这些是有效的 Python 标识符,并且它们不能包含连字符 (-
)。
可以使用 db_column=…
parameter [Django-doc] 将 Django 模型中的字段名称转换为数据库中的不同列名称。例如:
class MyModel(models.Model):
<b>ip_a</b> = models.CharField(max_length=128<b>, db_column='IP-A'</b>)
在 Django ORM 中以及几乎所有与模型对象的交互中,数据库端的列名称都可以看作是 "technical detail"。 ORM 使用字段名称。因此,您可以使用以下方式对模型对象进行排序:
MyModel.objects.order_by(<b>'ip_a'</b>)
ORM 将转换为真实的数据库列,从而在幕后对 IP-A
列进行排序。
我需要按列列表对 Django 查询集进行排序。其中一些包含减号字符,如 IP-A。
现在 Django 抱怨参数无效。
使用这些字符处理列的正确方法是什么?重命名列不是一个选项,因为模型是固定的。
通常 Django 使用的字段名称是您在模型 类 中定义的变量。除非您使用一些复杂的技巧,否则这些是有效的 Python 标识符,并且它们不能包含连字符 (-
)。
可以使用 db_column=…
parameter [Django-doc] 将 Django 模型中的字段名称转换为数据库中的不同列名称。例如:
class MyModel(models.Model):
<b>ip_a</b> = models.CharField(max_length=128<b>, db_column='IP-A'</b>)
在 Django ORM 中以及几乎所有与模型对象的交互中,数据库端的列名称都可以看作是 "technical detail"。 ORM 使用字段名称。因此,您可以使用以下方式对模型对象进行排序:
MyModel.objects.order_by(<b>'ip_a'</b>)
ORM 将转换为真实的数据库列,从而在幕后对 IP-A
列进行排序。