0

如何使 FileField 仅可供登录用户下载?

4

2 回答 2

2

如果您想向用户显示不同的表单,则需要不同的 ModelForm(或只是 Form)。此表单应如下所示:

class FormWithoutFormField(RegularForm):
    class Meta:
        exclude = ('field_name',)

这进入您要显示的新表单内部。请注意,您正在扩展您正在使用的其他形式。这应该保持几乎所有内容不变,并且您可以简单地排除您不想要的字段。

然后,您需要检查用户是否在您的视图中的某个位置登录。也就是说,类似:

if request.user.is_authenticated():
    form_class = FormWithoutFileField
else:
    form_class = RegularForm
# Do whatever you did with the normal form, but now with the new form.
于 2012-05-06T18:04:14.467 回答
1

您没有解释是否需要 django 管理员或自定义模板。如果它是用于自定义模板/视图,您不需要其他表单,只需在您的模板中执行此操作。

<div id="blah">
    {% if user.is_authenticated %}
        <a href="{{ somemodel.somefilefield.url }}">Download the file</a>
    {% else %}
        <p>No downloading for you!</p>
    {% endif %}
</div>

前提是您已经阅读了有关在 django 中处理静态文件的内容。

于 2012-05-07T00:02:52.673 回答