python - 使用枚举 Django 的下拉菜单主题

标签 python django drop-down-menu enums subject

我有使用枚举的带有主题下拉列表的 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/

相关文章:

Django - 防止重复记录

jquery - 任何人都可以帮助我使用 jquery 创建光滑的下拉菜单吗?

excel - 如何使用下拉列表在单元格中输入自由格式文本?

python - 为 input() 函数输入数据时箭头键不起作用

python - PIL.Image模块中各种图像缩放算法有什么区别?

python - skimage 调整大小给出奇怪的输出

javascript - html bootstrap下拉列表获取所选项目的索引

python - 使用 pandas 中的每日价格数据(带有日期时间戳)计算滚动每周/每月变化

python - 创建测试数据库时 Django 测试失败

python - Django Python 'Customer' 对象不可迭代