2013-06-05 77 views
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。

感謝所有的建議

回答

1

您可以使用DB函數CONCAT額外的,因爲我已經在我的情況下做到了這一點,以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') 

希望這會對你有幫助。

謝謝。

+0

謝謝你的回答。這個問題被詢問的項目現在已經完成併發貨了;我不再有權訪問代碼或需要更改代碼。如果我再次遇到這個問題,我會記住它。 – tannerli

相關問題