Django 模型表单不呈现
Django Model form not rendering
我正在尝试在 Django 上创建模型表单,但它不想呈现,即使我正确映射并创建了路径。
models.py
from django.db import models
# Create your models here.
Media_Choices = (
("TV", "TV"),
("Radio", "Radio"),
("Youtube", "Youtube"),
("Podcast", "Podcast"),
)
class Appear(models.Model):
Show = models.CharField(max_length=100)
Media = models.CharField(max_length=30, blank=True, null=True, choices=Media_Choices)
Episode = models.IntegerField()
Date = models.DateField(max_length=100)
Time = models.TimeField(auto_now=False, auto_now_add=False)
Producer = models.CharField(max_length=100)
Producer_Email = models.EmailField(max_length=254)
def __unicode__(self):
return self.Show + ' ' + self.Producer_Email
forms.py
from django import forms
from django.core.exceptions import ValidationError
from django.forms import ModelForm
from .models import Appear
class AppsForm(ModelForm):
class Meta:
model = Appear
fields = '__all__'
def clean_Producer_Email(self):
Producer_Email = self.cleaned_data.get('Producer_Email')
if (Producer_Email == ""):
raise forms.ValidationError('field cannot be left empty')
for instance in Appear.objects.all():
if instance.Producer_Email == Producer_Email:
raise forms.ValidationError('Please fill in correct email')
return Producer_Emailenter
views.py
from django.shortcuts import render
from .forms import AppsForm
# Create your views here.
def AppS(request):
form = AppsForm()
context = {'forms': form}
return render(request, 'AppsForm.html', context)
它拒绝呈现,但它显示文件中的 html 标记,但不显示表单中的字段。这是 html 模板
AppsForm.html
{% extends 'base.html' %}
{% block content %}
{% load crispy_forms_tags %}
<form action="" method="POST">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" value="submit">
</form>
{% endblock %}
根据您的 AppS() 函数,您将表单作为 'forms' 传递给您的 AppsForm.html,您可以使用 crispy_forms 呈现它,例如:
AppsForm.html:
{% extends 'your_app/base.html' %}
{% block content %}
{% load crispy_forms_tags %}
<form method="POST" class="" action="">
{% csrf_token %}
{{ forms|crispy }}
<input type="submit" class="" value="Submit">
</form>
{% endblock %}
你的观点是错误的试试这个
def AppS(request):
if request.method == 'POST':
form = AppsForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
form = AppsForm()
return render(request, 'AppsForm.html', {'form': form})
在你的 html
<form method="POST" class="" action="">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" class="" value="Submit">
</form>
现在你可以去告诉我你是否仍然遇到错误
我正在尝试在 Django 上创建模型表单,但它不想呈现,即使我正确映射并创建了路径。
models.py
from django.db import models
# Create your models here.
Media_Choices = (
("TV", "TV"),
("Radio", "Radio"),
("Youtube", "Youtube"),
("Podcast", "Podcast"),
)
class Appear(models.Model):
Show = models.CharField(max_length=100)
Media = models.CharField(max_length=30, blank=True, null=True, choices=Media_Choices)
Episode = models.IntegerField()
Date = models.DateField(max_length=100)
Time = models.TimeField(auto_now=False, auto_now_add=False)
Producer = models.CharField(max_length=100)
Producer_Email = models.EmailField(max_length=254)
def __unicode__(self):
return self.Show + ' ' + self.Producer_Email
forms.py
from django import forms
from django.core.exceptions import ValidationError
from django.forms import ModelForm
from .models import Appear
class AppsForm(ModelForm):
class Meta:
model = Appear
fields = '__all__'
def clean_Producer_Email(self):
Producer_Email = self.cleaned_data.get('Producer_Email')
if (Producer_Email == ""):
raise forms.ValidationError('field cannot be left empty')
for instance in Appear.objects.all():
if instance.Producer_Email == Producer_Email:
raise forms.ValidationError('Please fill in correct email')
return Producer_Emailenter
views.py
from django.shortcuts import render
from .forms import AppsForm
# Create your views here.
def AppS(request):
form = AppsForm()
context = {'forms': form}
return render(request, 'AppsForm.html', context)
它拒绝呈现,但它显示文件中的 html 标记,但不显示表单中的字段。这是 html 模板
AppsForm.html
{% extends 'base.html' %}
{% block content %}
{% load crispy_forms_tags %}
<form action="" method="POST">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" value="submit">
</form>
{% endblock %}
根据您的 AppS() 函数,您将表单作为 'forms' 传递给您的 AppsForm.html,您可以使用 crispy_forms 呈现它,例如:
AppsForm.html:
{% extends 'your_app/base.html' %}
{% block content %}
{% load crispy_forms_tags %}
<form method="POST" class="" action="">
{% csrf_token %}
{{ forms|crispy }}
<input type="submit" class="" value="Submit">
</form>
{% endblock %}
你的观点是错误的试试这个
def AppS(request):
if request.method == 'POST':
form = AppsForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
form = AppsForm()
return render(request, 'AppsForm.html', {'form': form})
在你的 html
<form method="POST" class="" action="">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" class="" value="Submit">
</form>
现在你可以去告诉我你是否仍然遇到错误