bvm*_*ode 22 python django concatenation django-queryset django-annotate
考虑一个名为 的表DataTable。它有两个字段:A和B。
我想返回该表中的所有行,并注释一个名为 的字段,该字段是和字段C的串联。AB
这是我尝试过的:
from django.db.models import CharField, Value
from .models import DataTable
def Test(request):
query = DataTable.objects.all().annotate(C=Value('A' + '-' + 'B',
output_field=CharField()))
# the rest of the function...
Run Code Online (Sandbox Code Playgroud)
这里的问题是,C实际上每个返回行的字符串文字“A - B”。
A我想连接和字段的值B。
小智 31
看起来你需要concat:
from django.db.models import CharField, Value
from django.db.models.functions import Concat
query = DataTable.objects.annotate(C=Concat('A',
Value('-'), 'B', output_field=CharField()))
Run Code Online (Sandbox Code Playgroud)
Abd*_*du4 12
基本上有两种方法可以实现它。
第一个:
首先,您需要导入以下表达式。
from django.db.models import F, Value, Func
Run Code Online (Sandbox Code Playgroud)
然后,连接字段如下:
ann_concat = Customer.objects.annotate(
fullName = Func(F('first_name'), Value(' '),F('last_name'), function= 'CONCAT'))
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我将名字和姓氏连接到一个名为 fullName 的新字段中。
第二种: 这种方法比第一种方法短得多,您只需要导入 Concat() 和 Value() 即可使空格起作用。
from django.db.models.functions import Concat
short_syntax = Customer.objects.annotate(full_name = Concat('first_name',Value(' '),'last_name'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17768 次 |
| 最近记录: |