Actualizar vista: vistas basadas en funciones Django

Actualizar vista se refiere a una vista (lógica) para actualizar una instancia particular de una tabla de la base de datos con algunos detalles adicionales. Se utiliza para actualizar entradas en la base de datos, por ejemplo, actualizando un artículo en geeksforgeeks. Por lo tanto, la vista Actualizar debe mostrar los datos antiguos en el formulario y permitir que el usuario actualice los datos solo desde allí. Django brinda soporte extraordinario para Actualizar vistas, pero veamos cómo se hace manualmente a través de una vista basada en funciones. Este artículo gira en torno a Actualizar vista, que involucra conceptos como Django Forms , Django Models

Para Actualizar vista, necesitamos un proyecto con algunos modelos y varias instancias que se mostrarán. Básicamente, la vista de actualización es una combinación de la vista de detalles y la vista de creación. 

Vista de actualización de Django: vistas basadas en funciones

Ilustración de cómo crear y usar la vista de actualización usando un ejemplo. Considere un proyecto llamado geeksforgeeks que tenga una aplicación llamada geeks.  

Consulte los siguientes artículos para comprobar cómo crear un proyecto y una aplicación en Django. 
 

Después de tener un proyecto y una aplicación, creemos un modelo del cual crearemos instancias a través de nuestra vista. En geeks/models.py,  

Python3

# import the standard Django Model
# from built-in library
from django.db import models
  
# declare a new model with a name "GeeksModel"
class GeeksModel(models.Model):
 
    # fields of the model
    title = models.CharField(max_length = 200)
    description = models.TextField()
 
    # renames the instances of the model
    # with their title name
    def __str__(self):
        return self.title

Después de crear este modelo, necesitamos ejecutar dos comandos para crear la base de datos para el mismo. 

Python manage.py makemigrations
Python manage.py migrate

Ahora vamos a crear algunas instancias de este modelo usando shell, ejecute form bash, 

Python manage.py shell

Ingrese los siguientes comandos 

>>> from geeks.models import GeeksModel
>>> GeeksModel.objects.create(
                       title="title1",
                       description="description1").save()
>>> GeeksModel.objects.create(
                       title="title2",
                       description="description2").save()
>>> GeeksModel.objects.create(
                       title="title2",
                       description="description2").save()

Ahora tenemos todo listo para el back-end. Verifique que las instancias se hayan creado desde http://localhost:8000/admin/geeks/geeksmodel/ 

django-Updateview-check-models-instances

Ahora crearemos un Django ModelForm para este modelo. Consulte este artículo para obtener más información sobre modelform – Django ModelForm – Crear formulario a partir de modelos . crear un archivo forms.py en la carpeta geeks, 

Python3

from django import forms
from .models import GeeksModel
 
 
# creating a form
class GeeksForm(forms.ModelForm):
 
    # create meta class
    class Meta:
        # specify model to be used
        model = GeeksModel
 
        # specify fields to be used
        fields = [
            "title",
            "description"]

Para Update_view, se necesitaría alguna identificación para obtener una instancia particular del modelo. Por lo general, es una clave principal única, como id . Para especificar esta identificación necesitamos definirla en urls.py. Vaya a geeks/urls.py, 

Python3

from django.urls import path
 
# importing views from views..py
from .views import update_view, detail_view
 
urlpatterns = [
    path('<id>/', detail_view ),
    path('<id>/update', update_view ),
]

Vamos a crear estas vistas con explicaciones. En geeks/views.py,

Python3

from django.shortcuts import (get_object_or_404,
                              render,
                              HttpResponseRedirect)
 
# relative import of forms
from .models import GeeksModel
from .forms import GeeksForm
 
# after updating it will redirect to detail_View
def detail_view(request, id):
    # dictionary for initial data with
    # field names as keys
    context ={}
  
    # add the dictionary during initialization
    context["data"] = GeeksModel.objects.get(id = id)
          
    return render(request, "detail_view.html", context)
 
# update view for details
def update_view(request, id):
    # dictionary for initial data with
    # field names as keys
    context ={}
 
    # fetch the object related to passed id
    obj = get_object_or_404(GeeksModel, id = id)
 
    # pass the object as instance in form
    form = GeeksForm(request.POST or None, instance = obj)
 
    # save the data from the form and
    # redirect to detail_view
    if form.is_valid():
        form.save()
        return HttpResponseRedirect("/"+id)
 
    # add form dictionary to context
    context["form"] = form
 
    return render(request, "update_view.html", context)

Ahora cree las siguientes plantillas en la carpeta de plantillas, 
en geeks/templates/update_view.html,

HTML

<div class="main">
    <!-- Create a Form -->
    <form method="POST">
        <!-- Security token by Django -->
        {% csrf_token %}
 
        <!-- form as paragraph -->
        {{ form.as_p }}
 
        <input type="submit" value="Update">
    </form>
 
</div>

En geeks/templates/detail_view.html, 

HTML

<div class="main">
    <!-- Display attributes of instance -->
    {{ data.title }} <br/>
    {{ data.description }}
</div>

Verifiquemos si todo funciona, visite http://localhost:8000/1/update

django-update-view-

Aquí puede ver el formulario con los datos ya llenados de la instancia, ahora uno puede editar estos datos y actualizarlos fácilmente, vamos a verlo 
 

django-update-view-edit-data

Dale a actualizar y listo. 
 

django-update-view-result

Publicación traducida automáticamente

Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *