Stack OverFlow中的“收藏夹”按钮如何工作?

时间:2013-05-23 04:39:51

标签: django django-models django-views

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

我正在使用django。

我创建了以下模型:

models.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)

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

2 个答案:

答案 0 :(得分: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))
    

答案 1 :(得分:1)

我刚编辑了jack shedd的回答

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")