我有使用枚举的带有主题下拉列表的 ContactForm,主题是三个不同的字符串: 1.我有一个问题。 2. 帮助/支持 3. 请给我打电话。
当用户发送消息时必须选择以上三个之一,下面是我的代码:
*forms.py*
从 django_enumfield 导入枚举
class SubjectEnum(enum.Enum):
subject_one = 'I have a question'
subject_two = 'Help/Support'
subject_three = 'Please give me a call'
class ContactForm(forms.ModelForm):
name = forms.CharField(required=True)
email = forms.EmailField(required=True)
subject = forms.TypedChoiceField(choices=SubjectEnum.choices(), coerce=str)
message = forms.CharField(widget=forms.Textarea)
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.add_input(Submit('submit', 'Submit'))
super(ContactForm, self).__init__(*args, **kwargs)
和 view.py 文件如下:
class ContactFormView(FormView):
form_class = ContactForm
template_name = "contact/email_form.jade"
success_url = '/email-sent/'
def form_valid(self, form):
message = "{name} / {email} said: ".format(
name=form.cleaned_data.get('name'),
email=form.cleaned_data.get('email'))
message += "\n\n{0}".format(form.cleaned_data.get('message'))
send_mail(
subject=form.cleaned_data.get('-subject').strip(),
message=message,
from_email="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9cf9f2ede9f5eef5f9efdcf9e4fdf1ecf0f9b2fff3f1" rel="noreferrer noopener nofollow">[email protected]</a>",
recipient_list=[settings.LIST_OF_EMAIL_RECIPIENTS],
)
return super(ContactFormView, self).form_valid(form)
联系表:
- extends "base.jade"
- load crispy_forms_tags
block meta_title
| Contact Us
block content
.jumbotron
h1 Contact Us
.row
.span6
{% crispy form form.helper %}
我收到一个错误,ValueError: ModelForm 没有指定模型类。大家有什么想法吗? 谢谢
最佳答案
您应该在模型表单中指定一个 Meta
类并设置所使用的模型。请注意,您不需要指定与模型字段相同的表单字段。
class ContactForm(forms.ModelForm)
name = forms.CharField(required=True)
email = forms.EmailField(required=True)
subject = forms.TypedChoiceField(choices=SubjectEnum.choices(), coerce=str)
message = forms.CharField(widget=forms.Textarea)
class Meta:
model = Contact
fields = ['name', 'email', 'subject', 'message']
如果您没有模型 Contact
,则应使用 Form
而不是 ModelForm
:
class ContactForm(forms.Form):
name = forms.CharField(required=True)
email = forms.EmailField(required=True)
subject = forms.TypedChoiceField(choices=SubjectEnum.choices(), coerce=str)
message = forms.CharField(widget=forms.Textarea)
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.add_input(Submit('submit', 'Submit'))
super(ContactForm, self).__init__(*args, **kwargs)
See the documentation有关 ModelForm
及其使用的更多信息。
关于python - 使用枚举 Django 的下拉菜单主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22843550/