我有以下(缩短的)Django 模型:
class File(models.Model):
name = models.TextField()
directory = models.ForeignKey(Directory)
class Directory(models.Model):
path = models.TextField()
用户通常将文件显示为path + '/' + name
fe '/bin' + '/' + 'bash' => '/bin/bash'
。我不想提供搜索字段来查找文件。
如果我使用 Q()-Objects,我可以在路径或名称中搜索匹配项,但如果用户搜索'/bin/bash'
.
到目前为止,我想出了:
files = File.objects.extra(select={'fullpath': 'path || "/" || name'},
tables=['directories'], order_by= ['fullpath']).distinct()
不幸的是,这会首先将所有目录与所有文件名连接起来,而不仅仅是那些实际存在的目录。此外,我无法添加另一个过滤器
.filter(fullpath__icontains=query)
因为我无法引用额外字段。
如果可能的话,我想留在 django OR-Mapper 上,而不是在数据库上执行原始 SQL。
感谢所有建议