Django ModelForm没有指定模型类。使用模型表格时

Django ModelForm没有指定模型类。使用模型表格时,django,forms,django-models,Django,Forms,Django Models,我的form.py文件 这意味着您没有为ContactForm指定要使用的模型。这通常应采用表格形式,但无论您希望在何处使用,表格应如下所示: from django import forms from django.core.validators import RegexValidator from django.forms import ModelForm class ContactForm(ModelForm): name = forms.CharField(max

我的form.py文件


这意味着您没有为ContactForm指定要使用的模型。这通常应采用表格形式,但无论您希望在何处使用,表格应如下所示:

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='')
如果您打算只添加一个表单,那么您的表单应该如下所示

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='')

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

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})
DEFAULT\u FROM\u EMAIL=“Yourdomain”
EMAIL_BACKEND=“django.core.mail.backends.smtp.EmailBackend”
电子邮件\u HOST=“yourdomain.com”
电子邮件端口=587
EMAIL_USE_TLS=True#如果您的邮件配置使用TLS/SSL
电子邮件\u主机\u用户=”email@yourdomain.com"
EMAIL\u HOST\u PASSWORD=“您的电子邮件\u密码”

注意你的域名,email@yourdomain.com,和您的电子邮件密码只是占位符。你应该指定你自己的。

显示你的
联系人表单
classOK我在这里发布我的form.py文件通过你的post添加类OK我只是did@GuruTech请考虑在question.class ContactForm(model .model表单)的开头添加描述性文本。:name错误:名称“model”未定义您没有定义要使用的模型?然后,您不应该使用ModelForm,而应该使用类似于我编辑状态答案的表单。如果您只是希望视图将联系人表单的详细信息发送到您指定的电子邮件地址,那么只需使用django.forms中的表单,就像我最初所说的那样。然后在您的视图中,从表单中获取数据并发送它。我想创建一个django表单,该表单将用户信息更新到数据库,并向成功注册的用户发送电子邮件。这与您最初在此处所述的问题大不相同。在我最后一次对答案进行编辑时,您会看到表单获取了信息,然后将其发送到您指定的任何电子邮件。您现在要问的是,首先需要有一个用户字段,最好是从AbstractUser类继承,然后创建一个视图函数供用户注册,并向该视图中您喜欢的任何电子邮件发送通知电子邮件。对于我不久前编写的一个应用程序,我必须使用CRON,以避免在用户注册时延迟应用程序。
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})
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"