Django Complex Query:组合输出



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

Python中的处理

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

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

这将返回strlist

在数据库中处理

我们还可以在数据库中执行串联,然后我们有一个字符串的查询集

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)

最新更新