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



考虑一个名为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字段的值。

看起来你需要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()这样做,当然还有Concatdjango

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...

最新更新