python Django中的ifelse语句

2024-09-28 17:01:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的新手,我有一个无法解决的问题。我试图根据参与者模型中的字段显示问题模型中的特定问题和其他相关属性。这里的问题是,即使条件为true,它也会直接转到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

Tags: 模型selfreturnmodelsrequestdefcontextall
3条回答

condition是外键,而不是字符串。您正在将它与'LPN'进行比较,但是Condition模型的任何实例都不会与该字符串相等

请尝试if participant.condition.name == 'LPN':Condition实例上的名称字段与该字符串进行比较

您的print语句显示它们显然是相同的,因为您已经定义了如何使用__str__方法将Condition实例表示为字符串-它将打印Condition实例的名称,但这并不意味着Condition值实际上等于该字符串

您必须更改此选项:

participant=request.user.participant

致:

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

你可能不得不使用

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

相关问题 更多 >