Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

358
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!