入力テキストボックスの初期値として使用するために、ユーザーオブジェクトまたは要求をフォームに渡すにはどうすればよいですか?例えばDjangoのフォームにユーザーオブジェクトを渡す方法
、私は自分のフォームを持っている:
私は私のuser.first_nameがCONTACT_NAMEフィールドのデフォルト値としてなりたい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"
。
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 + ' ',
['[email protected]'],
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,
})
すべてのヘルプは非常にあなたがビューに初期値を渡す必要があり
恐ろしい!私を助けてくれてありがとう!できます! 私の見解でしなければならなかったことは、 form_class = ContactForm(request = request) #新しいロジック! if request.method == 'POST': フォーム= ContactForm(data = request.POST、request = request) 私は以前に持っていたものなら、フォーム= ContactFrom(...)を変更しなければなりませんでした。理由は分かりませんが、現在は動作します:/:D –
これはビューの最初の行に間違いがあるためです。これは 'form_class = ContactForm'でなければなりません。このような関数ベースのビューでは、その行を完全に削除し、代わりに 'form = ContactForm(data = request.POST、request = request')を使う方がはっきりしていると思います。 – Alasdair