Как можно использовать request.user в форме модели в django?
Я хочу иметь возможность использовать request.user в модели формы init. Вот мое представление:
def create(request, pk):
if request.method == 'POST':
form = CreateForm(request.POST)
if form.is_valid():
object = form.save()
object.save()
return render(request, 'going_create.html', {'object':object})
else:
form = CreateForm()
return render(request, 'being_create.html', {'form':form})
В принципе, мне нужно, чтобы request.user заполнял поле формы django. Вот моя форма:
class CreateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super(CreateForm, self).__init__(*args, **kwargs)
self.fields['first_name'].initial = self.request.user.first_name
class Meta:
model = creater
fields = (
'first_name',
)
Кроме того, есть form = CreateForm(request.POST)
if request.method == 'POST', и form = CreateForm()
when else. Так как я не знаком с использованием представления функций, я надеюсь, что вы подскажете мне, куда мне нужно добавить код, чтобы я мог использовать request.user для предварительного заполнения поля django. Спасибо, и, пожалуйста, оставляйте любые вопросы, которые у вас есть.
Вы передаете его в качестве параметра:
class CreateForm(forms.ModelForm):
def __init__(self, *args, user=None, **kwargs):
super(CreateForm, self).__init__(*args, **kwargs)
if user is not None:
self.fields['first_name'].initial = user.first_name
class Meta:
model = creater
fields = (
'first_name',
)
В представлении вы затем создаете форму с:
from django.contrib.auth.decorators import login_required
@login_required
def create(request, pk):
if request.method == 'POST':
form = CreateForm(request.POST, user=request.user)
if form.is_valid():
object = form.save()
return render(request, 'going_create.html', {'object':object})
else:
form = CreateForm(user=request.user)
return render(request, 'being_create.html', {'form':form})
Примечание: В случае успешного POST запроса, вы должны сделать
redirect
. [Django-doc] для реализации паттерна Post/Redirect/Get [wiki]. Это позволяет избежать повторения POST-запроса, когда пользователь обновляет браузер. браузер.
Примечание: Вы можете ограничить представления для аутентифицированных пользователей с помощью декоратора
@login_required
декоратора [Django-doc].