Home > Back-end >  Fill out the form and save it in db base
Fill out the form and save it in db base

Time:11-10

I am working on a Django project and I want to fill out a form and save the data in the db database and then be able to show it on another page, I managed to create the form, following some tutorials, but it does not write me anything in the database. Here's how I currently have things:

forms.py

    from django import forms
    from .models import AusenciasForm
    from django.contrib.auth.models import User
    
class AusenciasForm(forms.ModelForm):
    class Meta:
        model = AusenciasFormulario
        fields = '__all__'
        widgets = {'fecha': forms.DateInput(attrs={'type': 'date'})}

models.py

from django.db import models
from django.utils import timezone
import datetime
from django.contrib.auth.models import User
from django.urls import reverse
    
class AusenciasFormulario(models.Model):
    #razon = models.ModelChoiceField(label="Razón", queryset=razones.object.all())
    fecha = models.DateField(("Date"),default=datetime.date.today)#label="Fecha", required=True
    razon = [
        ('Estudios/Examen','Estudios/Examen'),
        ('Enfermedad','Enfermedad'),
        ('Lesión','Lesión'),
        ('Motivos personales','Motivos personales'),
        ('Motivos familiares','Motivos familiares'),
        ('Otros','Otros')
    ]
    motivo = models.CharField(max_length=100, choices=razon, default='Otros')
    comentarios= models.CharField(max_length=200,blank=True)
    jugador = User

views.py

class FormularioAusenciaView(HttpRequest):

    def index(request):
        AusenciasFormulario = AusenciasForm()
        return render(request, 'blog/formularioAusencia.html', {'form':AusenciasFormulario})

    def procesar_formulario(request):
        AusenciasFormulario = AusenciasForm()
        if AusenciasFormulario.is_valid():
            AusenciasFormulario.save()
            AusenciasFormulario = AusenciasForm()
        return render(request, 'blog/formularioAusencia.html', {'form':AusenciasFormulario, 'mensaje': 'ok'})

Urls.py

from django.urls import path
from .views import PostListView, PostDetailView, PostCreateView, PostUpdateView, PostDeleteView,UserPostListView, FormularioAusenciaView, ausencias
from .import views
from django.contrib.auth.decorators import login_required

urlpatterns = [
    path('', login_required(PostListView.as_view()), name='blog-home'),
    path('user/<str:username>',login_required( UserPostListView.as_view()), name='user-posts'),
    path('post/<int:pk>/',login_required( PostDetailView.as_view()), name='post-detail'),
    path('post/new/',login_required( PostCreateView.as_view()), name='post-create'),
    path('post/<int:pk>/update/',login_required( PostUpdateView.as_view()), name='post-update'),
    path('post/<int:pk>/delete/',login_required( PostDeleteView.as_view()), name='post-delete'),
    path('about/', views.about, name='blog-about'),
    path('formularioAusencia/',login_required( FormularioAusenciaView.index), name='formularioAusencia'),
    #path('asistencia_done/',formularioAusencia, name='asistencia_done'),
    path('ausencias/',login_required( views.ausencias), name='ausencias'),
    
]

the template

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div >
    <div >
      <img  src="{{ user.profile.image.url }}">
      <div >
        <h2 >{{ user.username }}</h2>
        <p >{{ user.email }}</p>
      </div>
    </div>
    {% if user.is_authenticated %}
    <p></p><a >Rellenar si no vas a poder acudir a un próximo entrenamiento o partido</a></p>
    <!--<label><input type="checkbox" id="cbox1" value="first_checkbox"></label><br>-->
        <form method="POST" action="{% url 'ausencias' %}">{% csrf_token %}
          {{ form|crispy }}

          <button  type="submit">Enviar</button>
        </form>
        </div>
        <div >
        </div>
      {% endif %}
  </div>
{% endblock content %}

CodePudding user response:

don't u need to use :

    if request.method == 'POST'

CodePudding user response:

In forms.py:

You have imported wrong model name:

change this

from .models import AusenciasForm

To this:

from .models import AusenciasFormulario

And in views.py file: You have not added any orm query so that's why it is not saving in db.

views.py :

Do this:

def index(request):
    ausencias_formulario =  AusenciasFormulario.objects.all() #Here i have retrieved data using orm
    return render(request, 'blog/formularioAusencia.html', {'ausencias_formulario':ausencias_formulario})

def procesar_formulario(request):
    if request.method == 'POST':
       form = AusenciasForm()
       if form.is_valid():
           form.save()
           return HttpResponseRedirect('/home/') #Add your route name, where you want to go after form save
    else:
         form = AusenciasForm()
    return render(request, 'blog/formularioAusencia.html', {'form':form})

And in your templates:

formularioAusencia.html

<form method='post'>
   {{form}}
  <input type="submit" />     #Added new code here
</form>

After submitting above form, using below code, you will get that fields. Add below code after the form tag.

To display all the fields to templates add the below code in template:

{% for field in ausencias_formulario %}
   {{field.fecha}}
   #Add remaining fields here to display
{% endfor %}
  • Related