Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django表单未在HTML上呈现_Django_Python 3.x_Django Forms_Django Views - Fatal编程技术网

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

我是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_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)