簡體   English   中英

django從模型字段獲取值

[英]django get values from a model field

我有模特:

class Question(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=120)
    description = models.TextField()
    category = models.ForeignKey('Category')
    answers = models.ManyToManyField('Answer',related_name='answer_name', blank=True)
    post_date = models.DateTimeField(auto_now=True)
    published = models.BooleanField(default=False)
    vote = models.IntegerField(default=0) # Field that denotes the no of vote for particular question

    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_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][0]
            print "vote count"
            print vote_limit
            if vote_limit < 1:
                vote_count = ques
                print vote_count.user
                count = vote_count.vote
                count +=1
                vote_count.vote = count
                vote_count.user = request.user
                print vote_count.user
                vote_count.save()
            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)

在這里我想要的是其他用戶可以投票給該問題,但發布該問題的用戶除外。 當其他用戶投票該問題時,它說列表索引超出范圍。 我可以從此模型中實現此目標,還是必須單獨制定投票模型。

同樣,如果未登錄的用戶或未正常使用的用戶,則如果投票顯示該用戶對象沒有屬性is_general_user?

誰可以幫我這個事 ???

需要優化的幾件事:

代替

ques = Question.objects.get(id=pk)

最好使用get_object_or_404(Question, id=pk) 你永遠不知道將來會發生什么...

在執行if request.user.is_general_user:之前,您需要檢查用戶是否已通過身份驗證:

if request.user.is_authenticated():
    if request.user.is_general_user: 
        #....

這樣,您可以確保與身份驗證用戶一起玩,而不是與匿名用戶一起玩(不登錄的方式)。 這可能會解決您的其他list index out of range問題,因為現在過濾器中的request.user是經過身份驗證的用戶,該用戶也在db中。

您還可以使用以下更簡潔的方式編寫查詢:

vote_limit = request.user.question_set.values_list("vote", flat=True).filter(pk=pk)#[0][0]

我不知道您的意思是[0][0] ,如果要獲取最新的問題,可以執行以下操作:

.order_by('-id')[0]

而不是[0][0]

更新 :我沒有進入您真正想要的上下文。 我只是試圖修復錯誤。

暫無
暫無

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

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