Asociar usuario a su carga (publicación) en Django

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 –

  1. Creación del proyecto Django
  2. Creación de una aplicación que puede registrar el inicio de sesión y cerrar sesión del usuario
  3. 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.pyarchivo 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.pyy 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.
cool
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.htmlarchivo 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

Publicación traducida automáticamente

Artículo escrito por DhruvikD 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 *