Django 发布带有属性的联系表?
Django issue contact form with attribute?
models.py :
class InformationRequest(models.Model):
from_email = models.EmailField()
subject = models.CharField(max_length=120)
message = models.CharField(max_length=350)
forms.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)
views.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 保存到数据库吗?
对于 POST 请求,您应该使用 request.POST
初始化表单,对于 GET 请求,如果没有它,则相反,您应该使用:
if <strong>request.method == 'POST'</strong>:
form = ContactForm(<strong>request.POST, request.FILES</strong>)
if form.is_valid():
form.save()
return redirect('success')
else:
form = ContactForm()
而且你的表格是一个简单的表格,不是ModelForm
,所以你不能保存它。一个简单的解决方案是将其设为 ModelForm
并具有:
class ContactForm(forms.<strong>ModelForm</strong>):
# ⋮
class <strong>Meta</strong>:
model = InformationRequest
fields = ['from_email', 'subject', 'message']
models.py :
class InformationRequest(models.Model):
from_email = models.EmailField()
subject = models.CharField(max_length=120)
message = models.CharField(max_length=350)
forms.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)
views.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 保存到数据库吗?
对于 POST 请求,您应该使用 request.POST
初始化表单,对于 GET 请求,如果没有它,则相反,您应该使用:
if <strong>request.method == 'POST'</strong>:
form = ContactForm(<strong>request.POST, request.FILES</strong>)
if form.is_valid():
form.save()
return redirect('success')
else:
form = ContactForm()
而且你的表格是一个简单的表格,不是ModelForm
,所以你不能保存它。一个简单的解决方案是将其设为 ModelForm
并具有:
class ContactForm(forms.<strong>ModelForm</strong>):
# ⋮
class <strong>Meta</strong>:
model = InformationRequest
fields = ['from_email', 'subject', 'message']