Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在视图中访问pk(Django)_Python_Django_Views_Display - Fatal编程技术网

Python 如何在视图中访问pk(Django)

Python 如何在视图中访问pk(Django),python,django,views,display,Python,Django,Views,Display,我正在用Django编写一个小的聊天程序,但在进一步开发时遇到了问题 代码如下: models.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.TextFi

我正在用Django编写一个小的聊天程序,但在进一步开发时遇到了问题

代码如下:

models.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'),
]
My 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 %}
{%extends“chat/base.html”%}
{%block content%}
评论
{{chat.id}
    {注释%中的注释为%}
  • {{comment.comment}}:{{comment.comment}
  • {%endfor%}
{%endblock%}
我的数据库结构包含两个模型:聊天和评论。每个聊天室都应该有自己的评论。我使用“models.ForeignKey”来过滤每个聊天室的评论。在my index.html中,我列出了所有聊天记录,每个聊天记录都有一个指向/comments/部分的超链接

在my views.py中有一行:“queryset=Comment.objects.filter(chat_id=1)” Chat_id是comments sql表中的列,现在它只显示属于pk=1的聊天的注释。如何自动访问不同URL/comments/1//comments/2/等的聊天室

希望解释清楚。对不起,这里的初学者,如果没有太多意义,我可以尝试进一步解释

最好的,
Fabian

您可以使用普通视图,而不是
评论列表

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

url(r'^comments/(?P<chatid>[0-9]+)/$', views.comments_index, name='comments'),
url(r'^comments/(?P[0-9]+)/$),views.comments_index,name='comments'),

您应该定义
get\u queryset
方法,而不是独立的
queryset
属性

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

另一个(连贯的)问题是,comment_list.html中的{{chat.id}}没有显示在网站上。我不太确定如何“链接”评论和聊天,这样我就可以在我的html代码中访问这两个功能,非常好,谢谢。在my.html中,还有一种方法可以处理models->chatname,description,created_at中的聊天变量。它工作的唯一方式是当我使用“context”时,但是没有ListView,您需要定义get_context_data来返回包含聊天对象的dict。
def get_queryset(self, *args, **kwargs):
    return Comment.objects.filter(chat_id=self.kwargs['pk'])