如何查询用户上传的文件

时间:2015-12-07 16:56:50

标签: django django-queryset

我是一个django新手试图完成上传/下载应用程序。我正在使用django-registration-redux用户reg / auth并具有以下简单模型。我已经阅读了文档,但还没有弄清楚如何查询用户的相关字段,即带有外键给用户的模型字段。 这是我的模特:

from django.contrib.auth.models import User

FileUploads(models.Model):
    owner = models.ForeignKey(User)
    docfile = models.FileField(nul=True)
    docfileuuid = models.UUID()

我的问题是:拥有特定的用户名,如何查询他/她的文档文件列表?

我想要完成的是当用户登录并浏览视图时,我们称之为“localhost:/ yourfiles”,可以向他/她提供他的文件列表。

如果没有拥有外键的用户,我使用以下代码来检索所有上传文件的路径:

obj = FileUploads.objects.all
uploads = [i.docfile for i in]

现在我想要的是那些属于登录用户的文件,而不是所有的文档文件。

我阅读了文档并尝试了以下内容:

obj = User.objects.all()
obj.fileuploads_set.all()

但没有运气

3 个答案:

答案 0 :(得分:3)

当用户登录您的应用程序时,您确实拥有request.user

中的用户对象

在views.py中,

def file_list_view(request):
    # This gives you list of file objects.
    files = FileUploads.objects.filter(owner=request.user)
    return render_to_response('my_template.html', {'files': files})

在模板文件中

<ul>
   {% for file in files %}
       <li>{{ file.file_name }}</li> 
   {% endfor %}
</ul>

希望这会有所帮助。

答案 1 :(得分:1)

您可以使用上下文字典创建简单的函数视图。由登录的当前用户过滤模型中的文件,您可以通过request.user获取该文件。然后在您的模板中使用for循环打印用户拥有的所有文件URL,并使用{% empty %}模板标记在用户没有上传任何文件时显示消息。

<强> views.py

@login_required
def userfiles(request):

    context_dict = {}
    files = FileUploads.objects.filter(owner=request.user) 
    context_dict['files'] = files 

    return render(request, 'users_files.html', context_dict, )

模板:

{% for file in files %}
  file.docfile.url
{% empty %}
You don't have any files uploaded yet. 
{% endfor %}

答案 2 :(得分:1)

要通过查询用户名来获取属于用户的所有文件,请执行以下操作:

FileUploads.objects.filter(owner__usename='amir')

在views.py中,您可以这样做:

uploads = FileUploads.objects.filter(owner=request.user)