【问题标题】:Django- Problems with like/follow button'sDjango-喜欢/关注按钮的问题
【发布时间】:2017-04-26 22:25:08
【问题描述】:

我想在用户帖子上创建一个喜欢/关注系统。

由于许多用户能够喜欢一个帖子并且用户能够喜欢许多帖子,我制作了 2 个单独的模型。

模型.py:

class Question(models.Model):
user= models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.TextField()
content = models.TextField()
date_published = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(_('Last Edited'), auto_now=True)
slug = models.SlugField(max_length=255)

class Question_Follows(models.Model): 
question = models.ForeignKey(Question, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
count = models.IntegerField(default=0)

views.py

class QuestionDetailView(DetailView):

model = Question
slug  = 'slug'
template_name = "questions/question_detail.html" 


 def get_context_data(self, **kwargs):
    context = super(QuestionDetailView, self).get_context_data(**kwargs)
    context['now'] = timezone.now()

    #obj= Question_Follows.objects.filter(id=question.id)
    #context['follow_count'] = Question_Follows.objects.filter(id='question.id')
    #obj.count <----- none of these have worked so far.


    return context

detailview.html:

<div id="question_container">
<input type='hidden' id="{{ object.id }}" name="id">  <--- tried this as a way to get question id -->
<h1>{{ object.title }}</h1>
<p>{{ object.content }}</p>
<p>Published: {{ object.date_published|date }}</p>
<p>Date: {{ now |date }}</p>

<button class="follow"><span id='follow-span'>Follow| <strong id='follow-count'>{{ follow_count }}</strong> </button>
</span></button>

按下“赞”按钮后,我在“收集”正确的问题时遇到问题,并且还显示了该问题的正确赞数,即每个问题的关注次数。

【问题讨论】:

  • 您已将模板列为“detailview.html”,但在您的视图代码中,您已将"questions/question_detail.html" 指定为模板名称。它是哪一个?此外,在您的 detailview.html 中,您说过您尝试通过 {{object.id}} 获取对象 ID。看起来它应该对我有用。你在那里得到什么?

标签: python django


【解决方案1】:

几点:

  1. 如果我正确地理解了您的意图,您在 Question_Follows 模型上应该不需要 count = models.IntegerField(default=0)。每次用户提出问题时,都会在该模型的数据库表中创建一个新行。用户可以多次关注同一个问题吗?如果没有,则不需要计数字段。
  2. 问题的关注数量应该可以在视图中使用,例如:

    def get_context_data(self, kwargs):

    context = super(QuestionDetailView, self).get_context_data(**kwargs)
    context['now'] = timezone.now()
    context['follow_count'] = self.object.follows.count()
    return context
    

请注意,您需要为外键添加一个相关名称,因此它是 question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='follows') 才能正常工作。

  1. 按照惯例以 CamelCase(无下划线)和单数形式命名 Django 模型 - 所以 Question_Follows 将是 QuestionFollow

有关您的模板问题的更多问题,请参阅我的评论 - 我怀疑您只是使用了错误的模板文件名。

【讨论】:

  • 抱歉,代码格式似乎很糟糕 - 不知道为什么
  • 嘿,谢谢你的回答。上面的html名称只是一个类型,文件实际上叫做question_detail.html。我现在只是在尝试你的解决方案,我会告诉你进展如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 2021-11-01
  • 1970-01-01
相关资源
最近更新 更多