我有以下(缩短的)Django模型:
class File(models.Model):
name = models.TextField()
directory = models.ForeignKey(Directory)
class Directory(models.Model):
path = models.TextField()
用户通常将文件显示为path + '/' + name
,f.e。 '/bin' + '/' + 'bash' => '/bin/bash'
。我不是想提供一个搜索字段来查找文件。
如果我使用Q() - 对象我可以在路径或名称中搜索匹配项,但如果用户搜索'/bin/bash'
则会失败。
到目前为止,我已经提出:
files = File.objects.extra(select={'fullpath': 'path || "/" || name'},
tables=['directories'], order_by= ['fullpath']).distinct()
不幸的是,这确实首先将所有目录与所有文件名连接起来,而不仅仅是实际存在的目录。此外,我无法添加另一个过滤器
.filter(fullpath__icontains=query)
因为我无法引用额外字段。
如果可能的话,我想继续使用django OR-Mapper而不是在db上执行原始SQL。
感谢所有建议
答案 0 :(得分:2)
您可以在额外使用数据库功能 concat ,因为我这样做是为了在我的情况下连接日期。
Event.objects.all().order_by('-start_time').extra(select={'date':'concat(year(start_time),\"/\",month(start_time),\"/\",day(start_time))','time':'concat(hour(start_time),\":\",minute(start_time))','program_no':'program_id'}).values('id','program_no','event_type__name','venue__city','venue__state','venue__website','series_id','date','time')
希望这会对你有所帮助。
感谢。