如何在Django QuerySet中连接两个模型字段?

ycl3bljg  于 2023-05-30  发布在  Go
关注(0)|答案(3)|浏览(169)

考虑一个名为DataTable的表。它有两个字段:AB
我想返回这个表中的所有行,并注解一个名为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...

这里的问题是C实际上只是每个返回行的字符串文字“A - B”。
我想连接AB字段的值。

t40tm48m

t40tm48m1#

看起来你需要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()))
svdrlsy4

svdrlsy42#

基本上有两种方法来实现它。

第一个:

首先,您需要导入以下表达式。

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'))
wfsdck30

wfsdck303#

你可以用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...

相关问题