2012-05-06 2 views
0

Как я могу сделать FileField доступным только для загрузки для зарегистрированных пользователей?Django: Создание файлового поля доступно только для зарегистрированных пользователей

+0

Вы используете общий вид или просто пишете его самостоятельно? Какой у вас код? – Paragon

ответ

2

Вам нужна другая ModelForm (или просто форма), если вы хотите отобразить пользователю другую форму. Эта форма должна выглядеть примерно так:

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. 
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> 

При условии, что вы читали о handling static files в Джанго.

Смежные вопросы