![](/img/trans.png)
[英]Django: How to associate a comment to its corresponding OP in the HTML template?
[英]How can I link a comment to its corresponding post in Django?
我正在構建一個 Django 項目,其中有一個列出所有帖子的索引頁面。 用戶可以單擊帖子的名稱,這會將他們帶到包含完整帖子信息(日期、內容、類別)的詳細信息頁面。 此詳細信息頁面還有一個鏈接,可將用戶帶到可以發表評論的表單。 一旦用戶點擊提交,他們應該導航回帖子詳細信息頁面,評論應該在那里。 我現在遇到的問題是評論被自動分配給索引列表中的第一篇文章,而不是用戶訪問過的文章(我認為這可能與我模型中的當前默認設置有關,但是我還能如何獲得帖子ID?)。 我怎樣才能讓評論被分配到正確的帖子? 我已經嘗試了所有模型和視圖,但似乎沒有任何效果。 感謝您的幫助,我認為解決此問題的方法可能很簡單,但我在任何地方都找不到。
這是我的相關模型:
class UserPost(models.Model):
title = models.CharField(max_length=255)
category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)
content = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(User, default=1,
on_delete = models.CASCADE
)
#id = models.AutoField(primary_key=True)
def __str__(self):
"""String for representing the UserPost object."""
return self.title
def get_absolute_url(self):
"""Returns the url to access a detail record for this user post."""
return reverse('userpost-detail', args=[str(self.id)])
class Comment(models.Model):
author = models.ForeignKey(User, default=1,
on_delete = models.CASCADE
)
content = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
def comment_default():
return {UserPost.id}
post = models.ForeignKey(UserPost, default= comment_default, on_delete=models.CASCADE, related_name="comments")
def __str__(self):
"""String for representing the comment object."""
return '%s - %s - %s' % (self.post.title, self.author, self.created_on)
def get_absolute_url(self):
return reverse('userpost-detail', args=[str(self.post.id)])
而我的觀點:
class UserPostDetailView(generic.DetailView):
model = UserPost
#post = UserPost.objects.get(id=id)
#comments = Comment.objects.filter(Comment.post)
def get_context_data(self, **kwargs):
context = super(UserPostDetailView, self).get_context_data(**kwargs)
context['Comment'] = UserPost.comments
return context
class PostCreate(CreateView):
model = UserPost
fields = ['title', 'category', 'content']
class CommentCreate(CreateView):
model = Comment
fields = ['post','content']
還有我的 html:
{% extends "base.html" %}
{% block page_content %}
<h1>Title: {{ userpost.title }}</h1>
<p><strong>Author:</strong> {{ userpost.author }}</p>
<p><strong>Content:</strong> {{ userpost.content }}</p>
<p><strong>Category:</strong> {{ userpost.category }}</p>
<a class="btn btn-primary" href="{% url 'comment-create' %}" role="button">Leave a Comment</a>
<h3>Comments:</h3>
{% for comment in userpost.comments.all %}
<p>
On {{comment.created_on.date }}
<b>{{ comment.author }}</b> wrote:
</p>
<p>{{ comment.content }}</p>
<hr>
{% endfor %}
{% endblock %}
為此,您需要在您的 url 中傳遞 Post ID。
path("comment/<int:post_id>/", CommentCreateView, name="comment-create")
現在在模板中
<a class="btn btn-primary" href="{% url 'comment-create' userpost.id %}" role="button">Leave a Comment</a>
觀看次數
class CommentCreateView(CreateView):
model = Comment
fields = ['content'] # remove field post here
def form_valid(self, form):
form.instance.post_id = self.kwargs.get("post_id")
return super().form_valid(form)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.