Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

362
Vistas
Cómo acceder a pk en vistas (Django)

Estoy escribiendo un pequeño programa de chat en Django pero tengo problemas para avanzar.

Aquí está el código:

modelos.py

 from django.db import models from datetime import datetime from django.utils import timezone class Chat(models.Model): chatname = models.CharField(max_length=100) description = models.TextField() created_at = models.DateTimeField(default=datetime.now, blank=True) def __str__(self): return self.chatname class Comment(models.Model): chat = models.ForeignKey(Chat, on_delete=models.CASCADE) commenter = models.CharField(max_length=30) comment = models.TextField() created_at = models.DateTimeField(default=datetime.now, blank=True) def __str__(self): return self.comment

urls.py

 from django.conf.urls import url from . import views from django.views.generic import ListView from chat.views import CommentList app_name = 'chats' urlpatterns = [ url(r'^$', views.index, name="index"), url(r'^comments/(?P<pk>[0-9]+)/$', views.CommentList.as_view(), name='comments'), ]

vistas.py

 from django.shortcuts import render, redirect from django.http import HttpResponse from django.contrib.auth import authenticate, login from django.views import generic from .models import Chat, Comment def index(request): username = None if request.user.is_authenticated(): username = request.user.username chats = Chat.objects.all()[:10] context = { 'chats':chats } return render(request, 'chat/index.html', context) class CommentList(generic.ListView): queryset = Comment.objects.filter(chat_id=1) context_object_name = 'comments'

Mi comment_list.html

 {% extends "chat/base.html" %} {% block content %} <a href="/chat/">Go back</a> <h3>Comments</h3> <h2>{{chat.id}}</h2> <ul> {% for comment in comments %} <li>{{ comment.commenter }}: {{ comment.comment }}</li> {% endfor %} </ul> {% endblock %}

La estructura de mi base de datos contiene estos dos modelos: chat y comentario. Se supone que cada chat (sala) tiene sus propios comentarios. Usé 'models.ForeignKey' para poder filtrar los comentarios de cada chat (sala). En mi index.html enumero todos los chats y cada uno de ellos tiene un hipervínculo a la sección /comentarios/.

En mi views.py tengo esta línea: 'queryset = Comment.objects.filter(chat_id=1)' Chat_id es la columna en la tabla de comentarios sql y tal como está ahora solo mostrará los comentarios que pertenecen al chat con pk =1. ¿Cómo puedo acceder automáticamente al chat para las diferentes direcciones URL /comentarios/1/ /comentarios/2/ y así sucesivamente?

Espero que la explicación sea clara. Lo siento principiante aquí, puedo tratar de explicar más si no tiene mucho sentido.

Mejor, Fabián

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Debe definir el método get_queryset en lugar del atributo queryset independiente.

 def get_queryset(self, *args, **kwargs): return Comment.objects.filter(chat_id=self.kwargs['pk'])
about 4 years ago · Santiago Trujillo Denunciar

0

En lugar de CommentList , puede usar la vista simple:

 def comments_index(request, chatid): return render(request, 'xxx/comment_list.html', { 'comments': Comment.objects.filter(chat_id=chatid) })

Y en URL:

 url(r'^comments/(?P<chatid>[0-9]+)/$', views.comments_index, name='comments'),
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda