Django Complex Query:组合输出

时间:2018-06-07 13:45:13

标签: django django-models

models.py

class DeviceType(models.Model):
    device_type = models.CharField(max_length=200,unique=True)

    def __str__(self):
        return self.device_type

class Device(models.Model):
    device_type         = models.ForeignKey(DeviceType,to_field='device_type')
    serial_number       = models.CharField(max_length=200,unique=True)
    in_use_by           = models.ForeignKey(User,to_field='username')
    brand               = models.CharField(max_length=200,default="-", null=False)
    model               = models.CharField(max_length=200,default="-", null=False)
    type_number         = models.CharField(max_length=200,blank=True,null=True)
    mac_address         = models.CharField(max_length=200,blank=True,null=True)

以上是我的models.py文件。我想编写一个查询,以便按以下格式获取输出:

device_type-serial_number-model-brand

1 个答案:

答案 0 :(得分:1)

Python中的处理

我们可以生成一个包含这些字符串的列表,让Python构造这些字符串如下:

list(map(
    '-'.join,
    Devices.objects.values_list(
        'device_type__device_type',
        'serial_number',
        'model',
        'brand'
    )
)

这将返回list str个。{/ p>

数据库处理

我们也可以在数据库中执行连接,然后我们有一个 queryset 字符串:

from django.db.models import F, Value
from django.db.models.functions import Concat

Devices.objects.annotate(
    text=Concat(
        F('device_type__device_type'),
        Value('-'),
        F('serial_number'),
        Value('-'),
        F('model'),
        Value('-'),
        F('brand')
    )
).values_list('text', flat=True)