gpt4 book ai didi

python - 如何在 View 中访问 pk (Django)

转载 作者:行者123 更新时间:2023-11-30 22:38:32 25 4
gpt4 key购买 nike

我正在 Django 中编写一个小型聊天程序,但在进一步发展时遇到问题。

代码如下:

模型.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

url.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'),
]

View .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'

我的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 %}

我的数据库结构包含这两个模型:聊天和评论。每个聊天室(房间)都应该有自己的评论。我使用“models.ForeignKey”来过滤每个聊天(房间)的评论。在我的 index.html 中,我列出了所有聊天,每个聊天都有一个指向/comments/部分的超链接。

在我的views.py中,我有这一行:'queryset = Comment.objects.filter(chat_id=1)'Chat_id 是评论 SQL 表中的列,现在它只会显示属于 pk=1 的聊天的评论。如何自动访问不同网址/comments/1//comments/2/等的聊天..?

希望解释清楚。抱歉初学者,如果没有多大意义,我可以尝试进一步解释。

最好,费边

最佳答案

您应该定义 get_queryset 方法,而不是独立的 queryset 属性。

def get_queryset(self, *args, **kwargs):
return Comment.objects.filter(chat_id=self.kwargs['pk'])

关于python - 如何在 View 中访问 pk (Django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43499228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com