【问题标题】:ModelForm has no model class specified. when use model formModelForm 没有指定模型类。使用模型形式时
【发布时间】:2021-02-23 08:40:47
【问题描述】:
回溯(最近一次通话最后): 文件“E:\farming\eauth\lib\site-packages\django\core\handlers\exception.py”,第 47 行,在内部 响应 = get_response(请求) _get_response 中的文件“E:\farming\eauth\lib\site-packages\django\core\handlers\base.py”,第 179 行 响应 = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件“E:\farming\eauth\fwave\farmingwave\views.py”,第 14 行,联系方式 表格 = ContactForm() 文件“E:\farming\eauth\lib\site-packages\django\forms\models.py”,第 287 行,在 __init__ raise ValueError('ModelForm 没有指定模型类。') 异常类型:/about_us 处的 ValueError 异常值:ModelForm 没有指定模型类。

我的views.py文件

def contact(request):
if request.method == 'POST':
    form = ContactForm(request.POST)
    if form.is_valid():
        # send email code goes here
        return HttpResponseRedirect('/thanks/')
else:
    form = ContactForm()

return render(request, 'contact-form.html', {'form': form})

我的 form.py 文件

from django import forms
from django.core.validators import RegexValidator
from django.forms import ModelForm



class ContactForm(ModelForm):
    
    name = forms.CharField(max_length=100,widget=forms.TextInput(attrs={'class' : 'form-control col-lg-12', 'placeholder': 'Name'}), label='')
    email = forms.EmailField(widget=forms.TextInput(attrs={'class' : 'form-control col-lg-12', 'placeholder': 'Email'}), label='')
    Phonenumber = forms.CharField(max_length=10, validators=[RegexValidator(r'^\d{1,10}$')], widget=forms.TextInput(attrs={'class' : 'form-control col-lg-12', 'placeholder': 'Mobile'}), label='')

【问题讨论】:

  • 显示您的ContactForm 课程
  • 好的,我在这里发布我的 form.py 文件
  • 通过editing你的帖子添加课程
  • 好吧,我刚刚做了
  • @GuruTech,请考虑在问题的开头添加描述性文字。

标签: django forms django-models


【解决方案1】:

这意味着您没有指定 ContactForm 使用的模型。这通常应该在表单中,但无论您想要它在哪里,表单都应该是这样的:

from django import forms
from django.core.validators import RegexValidator
from django.forms import ModelForm
from .models import YourModel



class ContactForm(ModelForm):

    name = forms.CharField(max_length=100,widget=forms.TextInput(attrs={'class' : 
    'form-control col-lg-12', 'placeholder': 'Name'}), label='')
    email = forms.EmailField(widget=forms.TextInput(attrs={'class' : 'form-control 
    col-lg-12', 'placeholder': 'Email'}), label='')

    phonenumber = forms.CharField(max_length=10, validators= 
    [RegexValidator(r'^\d{1,10}$')], widget=forms.TextInput(attrs={'class' : 'form- 
    control col-lg-12', 'placeholder': 'Mobile'}), label='')

    class Meta:
        model = YourModel
        fields = ("name", "email", "phonenumber")

如果您打算只添加一个表单,那么您的表单应该如下所示。

from django.core.validators import RegexValidator
from django.forms import Form



class ContactForm(Form):

    name = forms.CharField(max_length=100,widget=forms.TextInput(attrs={'class' : 
    'form-control col-lg-12', 'placeholder': 'Name'}), label='')
    email = forms.EmailField(widget=forms.TextInput(attrs={'class' : 'form-control 
    col-lg-12', 'placeholder': 'Email'}), label='')

    phonenumber = forms.CharField(max_length=10, validators= 
    [RegexValidator(r'^\d{1,10}$')], widget=forms.TextInput(attrs={'class' : 'form- 
    control col-lg-12', 'placeholder': 'Mobile'}), label='')

    

您的视图现在应该如下所示

from django.core.mail import send_mail
def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
                            send_mail(
              'Subject here',
              f'Name: {form.name}\n Email: {form.email} \n Phone No: 
                 {form.phonenumber}',
              'from@example.com',
              ['to@example.com'],
              fail_silently=False,
              )
            return HttpResponseRedirect('/thanks/')
    else:
        form = ContactForm()

    return render(request, 'contact-form.html', {'form': form})

另外,请在 settings.py 文件中指定您的电子邮件配置,如下所示:

DEFAULT_FROM_EMAIL = "Yourdomain <email@yourdomain.com>"
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "yourdomain.com"
EMAIL_PORT = 587
EMAIL_USE_TLS = True # if your mail configurations uses TLS/SSL 
EMAIL_HOST_USER = "email@yourdomain.com"
EMAIL_HOST_PASSWORD = "your_email_password"

请注意,Yourdomain、email@yourdomain.com 和 your_email_password 只是占位符。你应该指定你自己的。

【讨论】:

  • 类 ContactForm(model.ModelForm): NameError: name 'model' is not defined
  • 您没有定义想要使用的模型?那么你不应该使用 ModelForm,而是像我这样编辑我的回答状态的 Form。
  • 首先,让我了解您希望联系表单做什么。如果您只想让视图将联系表单详细信息发送到您指定的电子邮件地址,那么只需使用 django.forms 中的表单,就像我最初所说的那样。然后在您的视图中,从表单中获取数据并发送。
  • 我想创建一个 django 表单,将用户信息更新到数据库并发送电子邮件给成功注册的用户
  • 那么这与您最初在此处陈述的问题完全不同。通过我对答案的最后一次编辑,您会看到表单获取了信息,然后将其发送到您指定的任何电子邮件。您现在要问的是,您首先需要一个 User 字段,最好从 AbstractUser 类继承,然后创建一个视图函数供用户注册,并在该视图中向您喜欢的任何电子邮件发送通知电子邮件。对于我前段时间写的一个应用程序,我必须使用 CRON 来避免在用户注册时延迟应用程序。
猜你喜欢
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2012-02-19
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 2013-11-22
相关资源
最近更新 更多