Vir*_*anu 13 python sql django django-models
有没有办法使用两个列的串联来过滤模型?我的模型是这样的:
class Item(models.Model):
series = models.CharField(max_length=50)
number = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
我需要的是在两列连接之后进行过滤,如果用户输入A123我希望能够找到任何具有系列和数字的项目,如%A和123%或%A1和23%这是否可以使用django型号?或者是否可以使用原始sql?我宁愿不用连接构造一个新列.
小智 24
除了前面所说的,例如:
from django.db.models import Value
from django.db.models.functions import Concat
queryset = Item.objects.annotate(search_name=Concat('series', Value(' '), 'number'))
# then you can filter:
queryset.filter(search_name__icontains='whatever text')
Run Code Online (Sandbox Code Playgroud)
我找到了自己的方式,如果你要使用一些ajax请求,那么我就开始像这样使用了
在views.py中
AllUser = User.objects.all()
users = []
for i in AllUser:
if query in i.get_full_name():
users += [{'first_name':i.first_name,'last_name':i.last_name,'full_name':i.get_full_name()}]
qUser = users
Run Code Online (Sandbox Code Playgroud)
并在返回的ajax页面(在我的情况下'searchajax.html')
{% if qUser %}
{% for i in qUser %}
<p class="queryP">{{ i.full_name }}</p>
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
它对我来说非常好:))
另一种方法是使用注释
from django.db.models import CharField, Value as V
from django.db.models.functions import Concat
author = User.objects.annotate(screen_name=Concat('first_name', V(' ') ,'last_name'))
for i in author:
print i.screen_name
Run Code Online (Sandbox Code Playgroud)
它也做同样的工作:))