Pra*_*arg 6 django django-models
我目前正在查询django的auth_users表,以返回与搜索条件匹配的用户。
users = User.objects.filter(
Q(first_name__icontains = name)|
Q(username__icontains = name) |
Q(email__icontains = name) |
Q(last_name__icontains = name)
).values(
'id', 'username', 'first_name', 'last_name', 'email'
).order_by('first_name')
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以将“ first_name”的名称更改为“ firstname”?就像我们可以在SQL [ Select first_name as firstname from auth_users]中一样;
这样我就可以使用firstname代替first_name来访问它
谢谢
您可以根据需要使用F表达式注释字段:
from django.db.models import F
users = User.objects.filter(
Q(first_name__icontains = name) |
Q(username__icontains = name) |
Q(email__icontains = name) |
Q(last_name__icontains = name)
).values(
'id', 'username', 'first_name', 'last_name', 'email'
).order_by('first_name'
).annotate(firstname = F('first_name'))
Run Code Online (Sandbox Code Playgroud)
我将在两个名称空间之间创建一个转换层。由于您使用的是 Django ORM 并且 JavaScript 代码是遗留的,我假设您希望在 Python 中执行此操作。
def translate(js_column_name):
return {
'firstname': 'first_name',
}.get(js_column_name, 'string to return when not found')
Run Code Online (Sandbox Code Playgroud)
使用此翻译函数,您可以在字典中创建关键字参数,然后Q使用以下命令将其传递给函数**:
User.objects.filter(
Q(**{
translate(js_firstname) + '_icontains': name
}) ...
Run Code Online (Sandbox Code Playgroud)
当然,我假设您不知道您正在翻译的输入,'firstname'否则您可以只定义正确的列名称,而不需要函数来执行此操作(即只需正常创建查询)。因此,我假设您正在动态接收 JavaScript 列名称,在这种情况下,我将使用这种方法。
PS 我希望这能最好地回答你的问题。将来我建议您提供问题的上下文(即指定您遇到此问题是因为...,并且 javascript 名称动态显示等)。这样您的问题将得到更快的解答。