оператор if-else в python django - PullRequest
0 голосов
/ 31 марта 2020

Я новичок в Django, и у меня есть проблема, которую я не смог решить. Я пытаюсь отобразить определенный c вопрос и другие связанные атрибуты из моей модели Вопросов на основе поля из модели Участника. Проблема здесь в том, что он напрямую переходит к оператору else, даже когда условие истинно. Я пытался напечатать (member.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

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

condition - это внешний ключ, а не строка. Вы сравниваете его с 'LPN', но ни один экземпляр вашей Condition модели не будет равен этой строке.

Попробуйте if participant.condition.name == 'LPN': сравнить поле имени в экземпляре Condition с этой строкой .

Ваш оператор print показывает, что они, по-видимому, одинаковы, поскольку вы определили способ представления экземпляров Condition в виде строк с помощью метода __str__ - он напечатает имя для Condition экземпляр, но это не означает, что значение Condition фактически равно этой строке.

2 голосов
/ 31 марта 2020

Вы должны изменить это:

participant=request.user.participant

на:

participant=Participant.objects.get(user=request.user)
0 голосов
/ 31 марта 2020

Возможно, вам придется использовать

from .models import Participant
participant = Participant.objects.get(user = request.user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...