Skip to content
Advertisement

Concatenating into a new field in a Django query

Consider a table called DataTable. It has two fields, A and B. I want to return all rows of this table plus annotate a field called C that is a concatenation of A and B.

Here is what I have tried

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

problem here is that C is literally just the string literal “A – B” for every returned row. I want to use the actual values of A and B into that concatenation.

Advertisement

Answer

looks like you need 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()))
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement