Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在连接的额外字段上筛选django queryset_Django_Django Queryset - Fatal编程技术网

在连接的额外字段上筛选django queryset

在连接的额外字段上筛选django queryset,django,django-queryset,Django,Django Queryset,我有以下(缩短的)Django型号: class File(models.Model): name = models.TextField() directory = models.ForeignKey(Directory) class Directory(models.Model): path = models.TextField() 用户通常会将文件显示为path+'/'+name,例如'/bin'+'/'+'bash'=>'/bin/bash'。我没有试图提供搜索

我有以下(缩短的)Django型号:

class File(models.Model):
    name = models.TextField()
    directory = models.ForeignKey(Directory)

class Directory(models.Model):
    path = models.TextField()
用户通常会将文件显示为
path+'/'+name
,例如
'/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或Mapper,而不是在db上执行原始SQL


感谢所有建议

您可以额外使用DB functionconcat,因为我已经在我的案例中对concat date做了这些

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')
希望这对你有帮助


谢谢。

谢谢你的回答。提出这个问题的项目现在已经完成并交付;我不再有权访问代码或需要更改它。不过,如果我再次遇到这个问题,我会牢记在心。