簡體   English   中英

如何將評論鏈接到 Django 中的相應帖子?

[英]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 }}&nbsp;
        <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM