如何将用户对象或请求传递给表单,以便将其用作输入文本框的初始值?
例如,我有我的表格:
class ContactForm(forms.Form):
contact_name = forms.CharField(required=True, initial="???")
contact_email = forms.EmailField(required=True)
subjects = forms.ChoiceField(choices=emailsubjects)
content = forms.CharField(
required=True,
widget=forms.Textarea
)
def __init__(self, *args,**kwargs):
self.request = kwargs.pop("request")
super(ContactForm, self).__init__(*args,**kwargs)
self.fields['contact_name'].label = "Your name:"
self.fields['contact_email'].label = "Your email:"
self.fields['content'].label = "What do you want to say?"
self.fields['subjects'].label = "Please, select the subject of your message"
我希望我的user.first\u name作为联系人\u name字段的默认值。
这是我的views.py,我在这里调用表单:
def ContactsView(request):
form_class = ContactForm(request=request)
# new logic!
if request.method == 'POST':
form = form_class(data=request.POST)
if form.is_valid():
contact_name = request.POST.get(
'contact_name'
, '')
contact_email = request.POST.get(
'contact_email'
, '')
form_content = request.POST.get('content', '')
subjects = form.cleaned_data['subjects']
subjects = dict(form.fields['subjects'].choices)[subjects]
# Email the profile with the
# contact information
template = get_template('threeD/email/contact_template.txt')
context = Context({
'contact_name': contact_name,
'subjects': subjects,
'contact_email': contact_email,
'form_content': form_content,
})
content = template.render(context)
email = EmailMessage(
"New message from " + contact_name,
content,
"Message - " + subjects + ' ',
['smart.3d.printing.facility@gmail.com'],
headers={'Reply-To': contact_email}
)
email.send()
messages.success(request, "Thank you for your message.")
return redirect('/index/contacts/')
return render(request, 'threeD/contacts.html', {
'form': form_class,
})
任何帮助都将不胜感激
2条答案
按热度按时间watbbzwu1#
您已更改表单以获取请求对象。因此,您可以访问
self.request.user
在表单的方法中:您还必须更新视图以传递请求对象。记住更新get和post请求的代码。
最后,通过将请求传递给表单,您已经将其与视图紧密耦合。最好通过考试
user
改成表格。这样可以更容易地从视图中单独测试表单。如果更改表单,请记住也要更新视图。lmvvr0a82#
您需要在视图中传递初始值:
意见: