1

我正在为我的网站创建一个论坛。我想知道 StackOverFlow 网页(即本网站)中的“这是你最喜欢的问题”按钮是如何工作的?

我正在使用 django。

我创建了模型,例如:

模型.py

class Question(models.Model):
    user=models.ForeignKey(User)
    created=models.DateTimeField(auto_now_add=True)
    topic=models.ForeignKey(Topic)
    question=models.TextField()
    tags=models.CharField(max_length=50,blank=True)


class Favourites(models.Model):
    '''
    Does this your Favourite Question'''
    user=models.ForeignKey(User)
    favourite=models.BooleanField(default=False)
    question=models.ForeignKey(Question)

我还想知道如何创建视图以获取特定问题的总收藏夹以及任何其他修改后的模型。

4

2 回答 2

2
  1. 您可能不需要“最喜欢”字段。您可以假设,如果您的表格中有与给定用户相关的给定问题的条目,则该问题是用户最喜欢的。

  2. 您需要创建一个带有问题 ID 的视图,并将其标记为当前登录用户的收藏夹:

    def mark_as_favorite(request, question_id, *args, **kwargs):
        if request.user.is_authenticated():
            question = get_object_or_404(Question, id=question_id)
            favorite = Favourite.objects.create(user=request.user, question=question)
            return HttpResponse("Marked")
        else:
            return HttpResponseForbidden("User is not logged in")
    
  3. 查找给定问题的总收藏夹很容易:

    def question(request, quesiton_id, *args, **kwargs):
        question = get_object_or_404(Question, id=question_id)
        favorites = Favourites.objects.filter(question=question)
        favorites_count = favorites.count()
        return render_to_response('template', {'question':questions, 'favorites_count':favorites_count}, context_instance=RequestContext(request))
    
于 2013-05-23T05:22:30.637 回答
1

我刚刚编辑了杰克谢德的答案

def mark_as_favorite(request, question_id, *args, **kwargs):

    if request.user.is_authenticated():
        fav, created = Favourite.objects.get_or_create(user=request.user, question=question)
        if created:
            return HttpResponse("Marked")
        else:
            fav.delete()
            return HttpResponse("Un Marked")

    else:
        return HttpResponseForbidden("User is not logged in")
于 2013-05-23T06:49:08.380 回答