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 Models_Django Queryset - Fatal编程技术网

django QuerySet过滤器()

django QuerySet过滤器(),django,django-models,django-queryset,Django,Django Models,Django Queryset,我有一个这样的模型 class File(models.Model): folder=models.ForeignKey(Folder, null=True, blank=True) uploaded_file=models.FileField(upload_to=get_upload_path) pub_date = models.DateTimeField('date published',default=timezone.now()) tag=models

我有一个这样的模型

class File(models.Model):

    folder=models.ForeignKey(Folder, null=True, blank=True)
    uploaded_file=models.FileField(upload_to=get_upload_path)
    pub_date = models.DateTimeField('date published',default=timezone.now())
    tag=models.ManyToManyField(FileTag)
    notes=models.TextField(max_length=200)
    uploader=models.ForeignKey(User)

    def __unicode__(self):
        return str(self.uploaded_file)
    #return os.path.basename(self.uploaded_file.name)

    def filename(self):
     return os.path.basename(self.uploaded_file.name)
        sr_files=File.objects.filter(filename__contains=keyword)
我想做这样的事

class File(models.Model):

    folder=models.ForeignKey(Folder, null=True, blank=True)
    uploaded_file=models.FileField(upload_to=get_upload_path)
    pub_date = models.DateTimeField('date published',default=timezone.now())
    tag=models.ManyToManyField(FileTag)
    notes=models.TextField(max_length=200)
    uploader=models.ForeignKey(User)

    def __unicode__(self):
        return str(self.uploaded_file)
    #return os.path.basename(self.uploaded_file.name)

    def filename(self):
     return os.path.basename(self.uploaded_file.name)
        sr_files=File.objects.filter(filename__contains=keyword)
但是我不能将filter与filename()自定义函数一起使用 Plz帮助

这是我的模板代码

    {% if sr_files %}
    <ul>
    {% for rf in sr_files %}
        <li><a href="/documents/{{rf.uploaded_file}}">{{ rf.filename }}</a></li>
    {% endfor %}
    </ul>
    {% else %}
        <p>No Files Found containing {{ keyword }}</p>
    {% endif %}
{%if sr_文件%}
    {sr_文件中rf的%s%}
  • {%endfor%}
{%else%} 未找到包含{{keyword}}的文件

{%endif%}
是的,您不能在筛选器中使用属性和函数名

这可以使用列表压缩或生成器表达式执行,如下所示:

# for single File object 
sr_file = next(
          (f for f in File.objects.filter() if keyword in f.filename()), 
          None)


返回路径中最后一个
/
后面的部分是
os.path.basename
所做的。所以你可以用

或者干脆

files = File.objects.filter(uploaded_file__contains=keyword)
# Then discard false matches
files = (f for f in files if keyword in f.filename())

是的,它为我提供了所需的输出,但我希望sr_文件是文件类型对象的集合,这样我就可以通过在文件类型对象中提供id的适当链接来打开文件。这是我的模板code@wrufesh在第二个列表中,压缩表达式
sr_文件
确实是文件类型对象的集合。您可以在模板代码中进行迭代。@wrufesh Your welcome:),顺便说一句,如果您在模板代码中的
rf.filename
中出现错误,请使其属性读取此