考虑一个名为DataTable
的表。它有两个字段:A
和B
。
我想返回此表中的所有行,并注释一个名为C
的字段,该字段是A
和B
字段的串联。
这是我尝试过的:
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...
这里的问题是C
实际上只是每个返回行的字符串文字"A - B"。
我想连接A
和B
字段的值。
看起来你需要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()))
基本上有两种方法可以实现它。
第一个:
首先,您需要导入以下表达式。
from django.db.models import F, Value, Func
然后,按如下方式连接字段:
ann_concat = Customer.objects.annotate(
fullName = Func(F('first_name'), Value(' '),F('last_name'), function= 'CONCAT'))
在上面的示例中,我将名字和姓氏连接到一个名为 fullName 的新字段中。
第二个:这种方法比第一种方法短得多,你只需要导入 Concat(( 和 Value(( 来制作空格函数。
from django.db.models.functions import Concat
short_syntax = Customer.objects.annotate(full_name = Concat('first_name',Value(' '),'last_name'))
你可以用Value()
这样做,当然还有Concat
django
Value
是设置空格或-
,请尝试以下操作:
from django.db.models import Value, CharField
from django.db.models.functions import Concat
def Test(request):
query = DataTable.objects.annotate(C=Concat('A',Value('-') ,'B',
output_field=CharField())
# the rest of the function...