Django表单未在HTML上呈现
我是django开发的初学者,我制作的表单有问题,我一直在寻找类似的问题,但没有一个能解决我的问题 HTML中没有表单呈现字段,但按钮呈现良好 我的表格:Django表单未在HTML上呈现,django,python-3.x,django-forms,django-views,Django,Python 3.x,Django Forms,Django Views,我是django开发的初学者,我制作的表单有问题,我一直在寻找类似的问题,但没有一个能解决我的问题 HTML中没有表单呈现字段,但按钮呈现良好 我的表格: from django import forms from .models import Aluno class NovoAluno(forms.Form): class Meta: model = Aluno nome = forms.CharField(min_length=15, max_l
from django import forms
from .models import Aluno
class NovoAluno(forms.Form):
class Meta:
model = Aluno
nome = forms.CharField(min_length=15, max_length=100)
direccion = forms.CharField(min_length=10, max_length=250)
ciudad = forms.CharField(min_length=3, max_length=50)
provincia = forms.CharField(min_length=4, max_length=50)
comunidad = forms.CharField(min_length=4, max_length=50)
cp = forms.IntegerField()
faixas = ['Blanco', 'Gris', 'Amarilla', 'Naranja', 'Verde', 'Azul', 'Roxa', 'Marrón', 'Preta']
graduacion = forms.ChoiceField(choices=faixas)
inicio = forms.DateInput()
nacimento = forms.DateInput()
lic = ['Basica', 'Completa']
licencia = forms.ChoiceField(choices=lic)
documento = forms.CharField(min_length=4, max_length=9)
email = forms.EmailField(min_length=10)
profesor = forms.CharField(min_length=5, max_length=100)
centro = forms.CharField(min_length=5, max_length=50)
我的看法:
from django.shortcuts import render, get_object_or_404, redirect
from .forms import NovoAluno
from .models import Aluno
def home(request):
return render(request, 'academia/home.html', {})
def novo(request):
if request.method == "POST":
form = NovoAluno()
if form.is_valid():
form.save()
return redirect('aluno_detalhes', pk=form.pk)
else:
form = NovoAluno()
return render(request, 'academia/cadastro.html', {'form': form})
def pesquisar(request):
return render(request, 'academia/pesquisa.html', {})
def aluno_detalhe(request, pk):
aluno = get_object_or_404(Aluno, pk=pk)
return render(request, 'academia/aluno.html', {'aluno': aluno})
我的模型:
from django.db import models
class Aluno(models.Model):
nome = models.CharField(max_length=100)
direccion = models.CharField(max_length=250)
ciudad = models.CharField(max_length=50)
provincia = models.CharField(max_length=50)
comunidad = models.CharField(max_length=50)
cp = models.IntegerField()
nacimento = models.DateField()
inicio = models.DateField()
documento = models.CharField(max_length=9)
email = models.EmailField()
profesor = models.CharField(max_length=100)
centro = models.CharField(max_length=50)
graduacion = models.CharField(max_length=10)
licencia = models.CharField(max_length=8)
表单所使用的内容块
{% block content %}
<h1>Novo Aluno:</h1>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Cadastrar!</button>
</form>
{% endblock %}
{%block content%}
诺沃阿鲁诺:
{%csrf_令牌%}
{{form.as_p}}
地籍!
{%endblock%}
嗯,先谢谢你,如果这是一个愚蠢的错误,我很抱歉,但我不能
看看它在哪里…看起来你把forms.Form和forms.ModelForm搞混了。尝试更改为如下所示的模型形式:
from django import forms
class NovoAluno(forms.ModelForm):
class Meta:
model = Aluno
fields = '__all__'
或者,如果只需要特定字段:
class NovoAluno(forms.ModelForm):
class Meta:
model = Aluno
fields = [
'nome',
'direcction',
'ciudad',
]
或者使用“forms.Form”从已有的类中删除类元和模型,并(修复缩进):
编辑:上面提到的一切都很好,除了定义选项时,它们应该是2元组对。你可以阅读。这样您就不会得到“ValueError:太多的值需要解包(预期为2个)”
问题解决了
from django import forms
from .models import Aluno
class NovoAluno(forms.Form):
model = Aluno
nome = forms.CharField(min_length=15, max_length=100)
direccion = forms.CharField(min_length=10, max_length=250)
ciudad = forms.CharField(min_length=3, max_length=50)
provincia = forms.CharField(min_length=4, max_length=50)
comunidad = forms.CharField(min_length=4, max_length=50)
cp = forms.IntegerField()
faixas = (
('Blanco', 'Blanco'),
('Gris', 'Gris'),
('Amarilla', 'Amarilla'),
('Naranja', 'Naranja'),
('Verde', 'Verde'),
('Azul', 'Azul'),
('Roxa', 'Roxa'),
('Marrón', 'Marrón'),
('Preta', 'Preta'),
)
graduacion = forms.ChoiceField(choices=faixas)
inicio = forms.DateInput()
nacimento = forms.DateInput()
lic = (('Basica', 'Basica'),
('Completa', 'Completa'),
)
licencia = forms.ChoiceField(choices=lic)
documento = forms.CharField(min_length=4, max_length=9)
email = forms.EmailField(min_length=10)
profesor = forms.CharField(min_length=5, max_length=100)
centro = forms.CharField(min_length=5, max_length=50)
删除了Meta类,然后意识到forms.ChoiceField的列表格式不正确,更改为元组,一切正常
Thx to@brandondavid请更新完整的表单.py codeforms.py updatedry@brandondavid的答案,没错,不要将您的解决方案添加到您的问题中。请发一个答案。哦,sry,我现在完全不知道我得到了什么不同的东西,ValueError在/aluno/新的太多的值需要解包(预期2)很好!为便于将来参考,“太多值错误”是由faixas字段引起的。将其更改为元组的元组(在表单呈现时充当键-值对)应该可以解决该问题。
Class NovoAluno(forms.Form):
#code suppressed
faixas = (('1', 'Blanco'), ('2', 'Gris'), ...
..., ('9', 'Marrón'), ('10', 'Preta'))
graduacion = forms.ChoiceField(choices=faixas)
...
etc
from django import forms
from .models import Aluno
class NovoAluno(forms.Form):
model = Aluno
nome = forms.CharField(min_length=15, max_length=100)
direccion = forms.CharField(min_length=10, max_length=250)
ciudad = forms.CharField(min_length=3, max_length=50)
provincia = forms.CharField(min_length=4, max_length=50)
comunidad = forms.CharField(min_length=4, max_length=50)
cp = forms.IntegerField()
faixas = (
('Blanco', 'Blanco'),
('Gris', 'Gris'),
('Amarilla', 'Amarilla'),
('Naranja', 'Naranja'),
('Verde', 'Verde'),
('Azul', 'Azul'),
('Roxa', 'Roxa'),
('Marrón', 'Marrón'),
('Preta', 'Preta'),
)
graduacion = forms.ChoiceField(choices=faixas)
inicio = forms.DateInput()
nacimento = forms.DateInput()
lic = (('Basica', 'Basica'),
('Completa', 'Completa'),
)
licencia = forms.ChoiceField(choices=lic)
documento = forms.CharField(min_length=4, max_length=9)
email = forms.EmailField(min_length=10)
profesor = forms.CharField(min_length=5, max_length=100)
centro = forms.CharField(min_length=5, max_length=50)