【问题标题】:How to write data forms on the database with Python and Django如何使用 Python 和 Django 在数据库上编写数据表单
【发布时间】:2021-07-04 22:28:10
【问题描述】:

我开始学习 Django、Python 和 SQLite 并制作一个小项目。问题是:我不知道如何在数据库上编写表单。我知道如何在浏览器上阅读和发布,但在编写表单内容并将其保存到数据库时遇到问题。

这是我的代码:

views.py

from django import forms
from django.shortcuts import render
from .models import Inscricao, Avaliacao

NOTA = ( ("1", "1"), ("2", "2"), ("3", "3"), ("4", "4"), ("5", "5"), ("6", "6"), ("7", "7"), ("8", "8"), ("9", "9"), ("10", "10") )
FILMES = ( ("1", "Horizonte Travessia"), ("2", "Até o Próximo Domingo"), ("3", "Uma Ameaça No Ar"), ("4", "Um Passageiro"),
        ("5", "Todas As Coisas Que Não Foram Ditas Semana Passada"), ("6", "Mãe é Ventre Estelar"), ("7", "OID'ÁGUA"), ("8", "Normal"),
        ("9", "Moremos Aqui, Filha"), ("10", "Chorume"),)
ESTADOS = ( ("1", "AC"), ("2", "AL"), ("3", "AP"), ("4", "AM"), ("5", "BA"), ("6", "CE"), ("7", "ES"), ("8", "GO"), ("9", "MA"), ("10", "MT"),
                 ("11", "MS"), ("12", "MG"))

class formInscricao(forms.Form):
        nome = forms.CharField(label="Nome", max_length=64)
        idade = forms.IntegerField(min_value=16, label="Idade")
        email = forms.EmailField(max_length=64, label="Email")
        estado = forms.ChoiceField(label="Estado", choices=ESTADOS)
        cidade = forms.CharField(max_length=64, label="Cidade")

class formAvaliacao(forms.Form):
        nomeAvaliador = forms.CharField(label="Nome")
        idadeAvaliador = forms.IntegerField(label="Idade")
        emailAvaliador = forms.EmailField(label="Email")
        filme = forms.ChoiceField(label="Filme", choices=FILMES)
        nota = forms.ChoiceField(choices=NOTA,label="Nota")
        avaliacao = forms.CharField(label="Avaliação")

...

def inscricao(request):
        if request.method == "POST":
                form = formInscricao(request.POST)
                if form.is_valid():
                        nome = form.cleaned_data["nome"]
                        nome.save()
                        idade = form.cleaned_data["idade"]
                        idade.save()
                        email = form.cleaned_data["email"]
                        email.save()
                        estado = form.cleaned_data["estado"]
                        estado.save()
                        cidade = form.cleaned_data["cidade"]
                        cidade.save()
                else:
                        render(request, "cinema/inscricao.html", {
                                "formInscricao": formInscricao,
                        })
        return render(request, "cinema/inscricao.html", {
                "formInscricao": formInscricao(),
        })
def avaliacao(request):
        if request.method == "POST":
                form = formAvaliacao(request.POST)
                if form.is_valid():
                        nomeAvaliador = form.cleaned_data["nomeAvaliador"]
                        nomeAvaliador.save()
                        idadeAvaliador = form.cleaned_data["idadeAvaliador"]
                        idadevaliador.save()
                        emailAvaliador = form.cleaned_data["emailAvaliador"]
                        emailAvaliador.save()
                        filme = form.cleaned_data["filme"]
                        filme.save()
                        nova = form.cleaned_data["nota"]
                        nova.save()
                        avalicao = form.cleaned_data["avaliacao"]
                        avaliacao.save()
                else:
                        render(request, "cinema/inscricao.html", {
                                "formAvaliacao": formAvaliacao(),
                        })
        return render(request, "cinema/avaliacao.html", {
                "formAvaliacao": formAvaliacao()
        })

模型.py

from django.db import models
from django.db.models import Model

class Inscricao(models.Model):
        nome = models.CharField(max_length=64)
        idade = models.IntegerField()
        email = models.EmailField(max_length=64)
        estado = models.CharField(max_length=64)
        cidade = models.CharField(max_length=64)
        def __str__(self):
                return f"{self.id}: {self.nome}, {self.idade}, {self.email}, {self.estado}, {self.cidade}"

class Avaliacao(models.Model):
        nomeAvaliador = models.CharField(max_length=64)
        idadeAvaliador = models.IntegerField()
        emailAvaliador = models.EmailField(max_length=64)
        filme = models.CharField(max_length=64)
        nota = models.CharField(max_length=64)
        avaliacao = models.CharField(max_length=300)
        def __str__(self):
                return f"{self.id}: {self.nomeAvaliador}, {self.idadeAvaliador}, {self.emailAvaliador}, {self.filme}, {self.nota}, {self.avaliacao}"


avaliacao.html:

{% extends "cinema/layout.html" %}
{% block body %}
        <h1> Formulário de avaliação </h1>
        <br><br><br>
        <div class="introducao">
          <form method="post">
            {% csrf_token %}
              {{ formAvaliacao }}
              <br><br>
              <button type="submit">Enter</button>
          </form>
      </div>
{% endblock %}


inscricao.html:

{% extends "cinema/layout.html" %}
{% block body %}
    <h1> Formulário de inscrição</h1>
    <br><br><br>
    <div class="introducao">
      <form method="post">
        {% csrf_token %}
        <br><br>
        {{ formInscricao }}
        <br><br>
        <button type="submit">Enter</button>
    </form>
    </div>
{% endblock %}

我进行了迁移,但是,当我单击提交按钮时,图像上出现错误:

HTML of inscription page

Error: 'str' object has no attribute 'save'

Local vars

【问题讨论】:

    标签: python-3.x sqlite django-models django-views django-forms


    【解决方案1】:

    我在 Django 文档 (https://docs.djangoproject.com/en/3.1/topics/db/sql/) 中找到了答案。 views.py 的正确语法是这样的:

    def inscricao(request):
            if request.method == "POST":                                               
                    form = formInscricao(request.POST)
                    if form.is_valid():
                            nomeF = form.cleaned_data["nome"]
                            idadeF = form.cleaned_data["idade"]
                            emailF = form.cleaned_data["email"]
                            estadoF = form.cleaned_data["estado"]
                            cidadeF = form.cleaned_data["cidade"]
                            novosInscritos = Inscricao(nome=nomeF, idade=idadeF, email=emailF, estado=estadoF, cidade=cidadeF)
                            novosInscritos.save()
                    else:
                            render(request, "cinema/inscricao.html", {
                                    "formInscricao": formInscricao,
                            })
            return render(request, "cinema/inscricao.html", {
                    "formInscricao": formInscricao(),
            })
    def avaliacao(request):
            if request.method == "POST":
                    form = formAvaliacao(request.POST)
                    if form.is_valid():
                            nomeAvaliadorF = form.cleaned_data["nomeAvaliador"]
                            idadeAvaliadorF = form.cleaned_data["idadeAvaliador"]
                            emailAvaliadorF = form.cleaned_data["emailAvaliador"]
                            filmeF = form.cleaned_data["filme"]
                            notaF = form.cleaned_data["nota"]
                            avaliacaoF = form.cleaned_data["avaliacao"]
                            novaAvaliacaoF = Avaliacao(nomeAvaliador=nomeAvaliadorF, idadeAvaliador=idadeAvaliadorF, emailAvaliador=emailAvaliadorF, filme=f>
                            novaAvaliacaoF.save()
                    else:
                            render(request, "cinema/inscricao.html", {
                                    "formAvaliacao": formAvaliacao(),
                            })
            return render(request, "cinema/avaliacao.html", {
                    "formAvaliacao": formAvaliacao()
            }) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多