如何在 Django 中以模型形式使用 request.user?
How can you use a request.user in model form in django?
我希望能够在模型表单初始化中使用 request.user。这是我的观点:
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<strong>, user=None</strong>, **kwargs):
super(CreateForm, self).__init__(*args, **kwargs)
if <strong>user is not None</strong>:
self.fields['first_name']<strong>.initial = user.first_name</strong>
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<strong>, user=request.user</strong>)
if form.is_valid():
object = form.save()
return render(request, 'going_create.html', {'object':object})
else:
form = CreateForm(<strong>user=request.user</strong>)
return render(request, 'being_create.html', {'form':form})
Note: In case of a successful POST request, you should make a redirect
[Django-doc]
to implement the Post/Redirect/Get pattern [wiki].
This avoids that you make the same POST request when the user refreshes the
browser.
Note: You can limit views to a view to authenticated users with the
@login_required
decorator [Django-doc].
我希望能够在模型表单初始化中使用 request.user。这是我的观点:
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<strong>, user=None</strong>, **kwargs):
super(CreateForm, self).__init__(*args, **kwargs)
if <strong>user is not None</strong>:
self.fields['first_name']<strong>.initial = user.first_name</strong>
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<strong>, user=request.user</strong>)
if form.is_valid():
object = form.save()
return render(request, 'going_create.html', {'object':object})
else:
form = CreateForm(<strong>user=request.user</strong>)
return render(request, 'being_create.html', {'form':form})
Note: In case of a successful POST request, you should make a
redirect
[Django-doc] to implement the Post/Redirect/Get pattern [wiki]. This avoids that you make the same POST request when the user refreshes the browser.
Note: You can limit views to a view to authenticated users with the
@login_required
decorator [Django-doc].