Django proporciona funciones integradas de ForeignKey, ManytoManyField para asociar un modelo a otro modelo. Para asociar un modelo de usuario a un modelo de publicación, se pueden utilizar varias opciones. Este artículo gira en torno a cómo asociar un usuario a su publicación (modelo de publicación). Este tutorial utiliza el concepto de claves foráneas en Django y, al final, uno podrá crear una aplicación de carga de publicaciones y también una aplicación de perfil que contenga todas las cargas anteriores del usuario.
requisitos previos –
- Creación del proyecto Django
- Creación de una aplicación que puede registrar el inicio de sesión y cerrar sesión del usuario
- Realice migraciones en la aplicación y agregue la base de datos.
Ya hemos creado una aplicación de usuario para el registro, por lo que crearemos una nueva aplicación que puede llamarse blog de usuario (carga de blog del usuario). Para hacer esto, cree una aplicación en el archivo principal del proyecto escribiendo este código en su PowerShell o terminal.
django-admin startapp userblog
Ahora esta aplicación está disponible en su archivo de proyecto y primero debe agregar esta aplicación al archivo settings.py en el proyecto y agregar esta aplicación a INSTALLED_APPS
Ahora haga migraciones en su proyecto y agregue esta aplicación a su proyecto
python manage.py makemigrations python manage.py migrate
Ahora tenemos que usar modelos en esta aplicación para que Django pueda crear una tabla para la información que vamos a almacenar en nuestra base de datos y el usuario pueda ingresar la información. Tenemos que crear una clase en el models.py
archivo de la aplicación de blog de usuario que se denomina Snippet. Usaremos una clase ForeignKey que contendrá el valor de identificación del usuario y tiene una relación de uno a muchos, por lo que puede usar esta clase para asociar al usuario a cualquier otra actividad en la que participe el usuario.
from django.db import models from django.conf import settings User = settings.AUTH_USER_MODEL # Create your models here. class Snippet(models.Model): user = models.ForeignKey(User, default = 1, null = True, on_delete = models.SET_NULL ) blogname = models.CharField(max_length = 100) blogauth = models.CharField(max_length = 100) blogdes = models.TextField(max_length = 400) img = models.ImageField(upload_to ='pics') def __str__(self): return self.blogname
También cree un archivo python llamado como forms.py
y cree un ModelForm para el mismo para ingresar datos del usuario.
from django import forms from .models import Snippet class SnippetForm(forms.ModelForm): class Meta: model = Snippet fields = ['blogname', 'img', 'blogauth', 'blogdes' ]
Necesitamos migrar el modelo de clase de Snippet para que la administración de Django cree una base de datos para la carga de publicaciones y los detalles, así que haga migraciones del Snippet de clase y verá esto en la administración de django.
Aquí Usuario es una clave externa que mostrará todos los usuarios y almacenará el número de clave de la última instancia de carga de la publicación por parte de un usuario de forma predeterminada, está configurado como superusuario
Ahora iremos al archivo views.py de la aplicación y agregaremos el código principal que almacenará la información en la base de datos utilizando el objeto de formulario modelo .
- usblog : esto mostrará todas las publicaciones en nuestra página de inicio
- snippet_detail : obtendrá los datos del usuario en el formulario y asociará el blog al usuario
from django.shortcuts import render from django.http import HttpResponse from .forms import SnippetForm from .models import Snippet from django.contrib import messages # Create your views here. def usblog(request): snipps = Snippet.objects.all() return render(request, 'indexg.html', {'snipps' : snipps}) def snippet_detail(request): form = SnippetForm(request.POST or None, request.FILES or None) if request.method =='POST': if form.is_valid(): obj = form.save(commit = False) obj.user = request.user; obj.save() form = SnippetForm() messages.success(request, "Successfully created") return render(request, 'form.html', {'form':form})
Entonces, a estas alturas, la administración de Django ha creado la base de datos de la clase Snippet y puede verla visitando la administración de Django. Ahora tenemos que crear un form.html
archivo simple que contendrá un formulario desde donde el usuario puede ingresar las consultas que hemos establecido en la clase. Aquí viene la belleza de Django que, dado que hemos utilizado formularios modelo para nuestra aplicación, Django ha creado un código HTML de formulario que tendrá todas las consultas que necesitábamos. Simplemente cree un archivo HTML en su archivo de plantillas (form.html).
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Your Blog</title> </head> <body> <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{form.as_p}} <button type="submit">Submit</button> </form> </body> </html>
Ahora necesitaremos una página de inicio donde veremos todas las publicaciones de los usuarios, así que cree otro archivo HTML indexg.html e importe los objetos de función que hemos creado en el archivo views.py. (Imagen colocada de solo una parte del cuerpo de html para mostrar el código de python, puede hacer su propio índice con funciones)
<body> <h1>Post play<h4>Only for geeks</h4> </h1> <div class="topnav"> {% if user.is_authenticated %} <a href="#">Hi {{user.username}}</a> <a href="accounts/logout">Logout</a> <a href="snippet_detail">Write post</a> {% else %} <a href="accounts/register">Register</a> <a href="accounts/login">Login</a> {% endif %} </div> <p> {% for snips in snipps %} <img src="{{snips.img.url}}" alt="Image" class="img-fluid"> <h2 class="font-size-regular"><a href="#">{{snips.blogname}}</a></h2> <h3>{{snips.user}}</h3> {% if user.is_authenticated %} <p>{{snips.blogdes}}</p> {% else %} <p>Register/Login to know more</p> {% endif %} {% endfor %} </p> </div> </body>
Vayamos a nuestro archivo principal de URL donde tendremos una aplicación de cuenta y ahora haga que la aplicación de blog de usuario sea la predeterminada y agregue las URL de su aplicación. También en su aplicación de blog de usuario, agregue urls.py y agregue los enlaces de 2 funciones que son form.html y homepage (indexg.html).
URL principales
from django.contrib import admin from django.urls import path, include from django.conf import settings from django.conf.urls.static import static urlpatterns = [ path('', include('userblog.urls')), path('admin/', admin.site.urls), path('accounts/', include('accounts.urls')) ]
URL de blog de usuario –
from django.urls import path from . import views urlpatterns = [ path("snippet_detail", views.snippet_detail), path('', views.usblog, name ='usblog') ]
Inicie la aplicación y registre al usuario en su aplicación y haga una publicación
python manage.py runserver
Su navegador no admite la reproducción de video
ENLACE DE GITHUB – Github Repo