簡體   English   中英

django通過當前用戶篩選來投票

[英]django filter by current user to vote

我有一個模型:

class Question(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=120)
    description = models.TextField()
    answers = models.ManyToManyField('Answer',related_name='answer_name', blank=True)
    post_date = models.DateTimeField(auto_now=True)
    vote = models.IntegerField(default=0)

    def __unicode__(self):
        return self.title

我正在創建一個論壇,用戶可以在其中發布問題。 我想要的是,如果該問題有用,那么其他用戶只能對該問題投一次票。 如果用戶已投票一次,然后嘗試再次投票,則會顯示顯示消息,提示您無法兩次投票。 我為此寫了一個觀點,其中除了兩次投票的驗證外,其他所有東西都起作用。

這是我的看法:

def VoteCountView(request, pk):

    ques = Question.objects.get(id=pk)
    cpk = ques.category.id
    valid_user = ques.user.username

    if request.user.is_authenticated():
        if request.user.is_general_user:
            if request.user.username == valid_user:
                messages.warning(request, "You cannot vote your own question")
                return redirect("question-detail", pk, cpk)
            else:
                vote_limit = Question.objects.values_list("vote", flat=True).filter(pk=pk).filter(user=request.user)[0]
                if vote_limit < 1:
                    vote_count = ques
                    count = vote_count.vote
                    count +=1
                    vote_count.vote = count
                    vote_count.user = request.user
                    vote_count.save()
                    return redirect("question-detail", pk, cpk)
                else:
                    messages.warning(request,"You cannot vote twice")
                    return redirect("question-detail", pk, cpk)
        else:
            messages.warning(request,"You are not allowed to vote a question")
            return redirect("question-detail", pk, cpk)
    else:
        messages.warning(request, "You must login/sign up to vote.")
        return redirect("question-detail", pk, cpk)

我在這里想要實現的是vote_limit = Question.objects.values_list("vote", flat=True).filter(pk=pk).filter(user=request.user)[0] 我認為我正在使用的最后一個過濾器filter(user=request.user)無法正常工作,因為它已由發布問題的用戶過濾。

我可以通過相同的模型來完成此操作,還是必須制作不同的模型來實現此目的? 喜歡:

class VoteCount(models.Model):
    user = models.ForeignKey(User)
    title = models.ForeignKey(Question)
    vote = models.IntegerField(default=0)

誰能幫我 ??

你可以簡單地檢查

VoteCount.objects.filter(user=request.user, title=ques).exists()

知道用戶是否已經投票過這樣的問題

只需使用exist()來檢查用戶是否已經投票。 我認為您需要按照定義的方式創建模型Votecount才能完成任務。 但是,投票可能仍然存在問題,而不是在Votecount模型中。 每次有人投票回答一個答案時,只需更新Question模型中的投票並添加到Votecount模型即可。

def VoteCountView(request, pk): 
    ques = Question.objects.get(id=pk)
    cpk = ques.category.id
    valid_user = ques.user.username

    if request.user.is_authenticated():
        if request.user.is_general_user:
            if request.user.username == valid_user:
                messages.warning(request, "You cannot vote your own question")
                return redirect("question-detail", pk, cpk)
            elif VoteCount.objects.filter(user=request.user, title=ques).exists():
                messages.warning(request,"You cannot vote twice")
                return redirect("question-detail", pk, cpk)
            else:
                ques.vote +=1
                ques.save()
                v=Votecount(title=ques, user=request.user)
                v.save()    
        else:
            messages.warning(request,"You are not allowed to vote a question")
            return redirect("question-detail", pk, cpk)
    else:
        messages.warning(request, "You must login/sign up to vote.")
        return redirect("question-detail", pk, cpk)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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