2
我有以下的(缩短)Django的模型:筛选的Django的queryset通过级联额外场
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。
感谢所有的建议
谢谢你的回答。这个问题被询问的项目现在已经完成并发货了;我不再有权访问代码或需要更改代码。如果我再次遇到这个问题,我会记住它。 – tannerli