簡體   English   中英

python django中的if-else語句

[英]if-else statement in python django

我是 Django 的新手,我有一個無法解決的問題。 我正在嘗試根據 Participant 模型中的字段顯示我的 Question 模型中的特定問題和其他相關屬性。 這里的問題是,即使條件為真,它也會直接轉到 else 語句。我嘗試打印(participant.condition)並且它有效,所以我不確定為什么它不能與 if 語句一起使用。

@login_required
def LPSC_VIEW1(request):
    participant=request.user.participant
    if participant.condition == 'LPN':
        First_question= Question.objects.get(id=1)
        all_choices = First_question.choices.all()
        context = {'First_question': First_question, 'all_choices': all_choices}
        return render(request, 'study/FirstQN.html', context)
    else:
        First_question= Question.objects.get(id=12)
        all_choices = First_question.choices.all()
        context = {'First_question': First_question, 'all_choices': all_choices}
        return render(request, 'study/FirstQSC.html', context)

我的模型如下:

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    caption = models.CharField(max_length=200, default="this is a caption")
    choices = models.ManyToManyField(Choice)
    vis_image = models.ImageField(default= "this is an image", null=False, blank=False, upload_to="static/study/img")
    def __str__(self):
        return self.question_text


class Condition(models.Model): 
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Participant(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    condition = models.ForeignKey(Condition, on_delete=models.CASCADE)
    score = models.IntegerField(default=0)

    def __str__(self):
        return self.user.username

你必須改變這一點:

participant=request.user.participant

到:

participant=Participant.objects.get(user=request.user)

condition是外鍵,而不是字符串。 您將它與'LPN'進行比較,但您的Condition模型的任何實例都不會等於該字符串。

嘗試if participant.condition.name == 'LPN':Condition實例上的 name 字段與該字符串進行比較。

您的print語句顯示它們顯然是相同的,因為您已經定義了如何使用__str__方法將Condition實例呈現為字符串-它將打印Condition實例的名稱,但這並不意味着Condition值實際上相等到那個字符串。

你可能不得不使用

from .models import Participant
participant = Participant.objects.get(user = request.user)

暫無
暫無

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

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