我目前正在查询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')
我想知道我是否可以将'first_name'的名称更改为'firstname'?
就像我们可以在SQL [Select first_name as firstname from auth_users
];
这样我就可以使用firstname而不是first_name
来访问它由于
答案 0 :(得分:5)
您可以使用F expression:
按需添加字段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'))
答案 1 :(得分:0)
我会在两个名称空间之间创建一个转换层。由于您使用的是Django ORM并且JavaScript代码是遗留的,我认为您可能希望在Python中执行此操作。
def translate(js_column_name):
return {
'firstname': 'first_name',
}.get(js_column_name, 'string to return when not found')
使用此翻译功能,您可以在字典中创建关键字参数,然后使用Q
将其传递给**
函数:
User.objects.filter(
Q(**{
translate(js_firstname) + '_icontains': name
}) ...
当然我假设您不会知道您要翻译的输入是'firstname'
,否则您可以定义正确的列名而无需执行此操作(即只是正常创建查询)。所以我假设您正在动态地接收JavaScript列名称,在这种情况下,我会使用这种方法。
P.S。我希望这能最好地回答你的问题。将来我建议你为你的问题提供一个上下文(即指明你有这个问题,因为......,以及javascript名称动态出现等)。这样你的问题就会得到更快的回答。