首页 > 解决方案 > Django发出带有属性的联系表?

问题描述

模型.py:

class InformationRequest(models.Model):
    from_email = models.EmailField()
    subject = models.CharField(max_length=120)
    message = models.CharField(max_length=350)

表格.py:

from django import forms
from .models import InformationRequest
class ContactForm(forms.Form):
   from_email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'class': 'contact__input', 'placeholder': 'Email'}))
   subject = forms.CharField(required=True, widget=forms.TextInput(attrs={'class': 'contact__input', 'placeholder': 'Subject'}))
   message = forms.CharField(widget=forms.Textarea(attrs={'class': 'contact__input', 'cols': 0, 'rows': 8, 'placeholder': 'Message'}), required=True)

视图.py

from django.shortcuts import render, redirect
from .models import Home, About, Profile, Category, Skills, Portfolio
from .forms import ContactForm
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse, HttpResponseRedirect


def index(request):
   # Home
   home = Home.objects.latest('updated')

   # About
   about = About.objects.latest('updated')
   profiles = Profile.objects.filter(about=about)

   # Skills
   categories = Category.objects.all()

   skills = Skills.objects.all()

   # Portfolio
   portfolios = Portfolio.objects.all()

   if request.method == 'POST':
       form = ContactForm()
   else:
       form = ContactForm(request.POST or None)
       if form.is_valid():
           form.save()
           return redirect('success')

   context = {
       'home': home,
       'about': about,
       'profiles': profiles,
       'categories': categories,
       'portfolios': portfolios,
       'form': form,
       'skills': skills,
   }

   return render(request, 'index.html', context)

所以这就是问题所在

我想将 form.py 上的属性保留到变量中?为什么,因为它会保留 CSS 结构。那么您知道如何将表单 Post 保存到数据库吗?

标签: pythondjangodjango-modelsdjango-forms

解决方案


您应该为 POST 请求初始化表单,request.POST如果没有它的 GET 请求,则相反,您应该使用:

if request.method == 'POST':
    form = ContactForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()
        return redirect('success')
else:
    form = ContactForm()

此外,您的表单是一个简单的表单,而不是 a ModelForm,因此您无法保存它。一个简单的解决方案是使其成为ModelForm

class ContactForm(forms.ModelForm):
   # ⋮

    class Meta:
        model = InformationRequest
        fields = ['from_email', 'subject', 'message']

推荐阅读