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