Как обновить булево поле модели Django как истинное? - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь обновить поле модели django, которое состоит из логического значения. Вот один пользователь подаст заявку на проект и одно поле будет автоматически ложным по умолчанию. После проверки этой вставки администрация системы подтвердит правильность поля и одобрит предложение. Итак, теперь я хочу обновить поле как «True»

def project(request, project_id):
    all_primary_info = ProjectPrimaryInfo.objects.get(pk=project_id)
    if all_primary_info.approval == 'False':
        all_primary_info.approval.update(True)
    return render(request, 'administration/all_project_status.html')

Это модель ProjectPrimaryInfo:

class ProjectPrimaryInfo(models.Model):
    id = models.AutoField(primary_key=True)
    s_id = models.ForeignKey(Student, null=True, blank=True, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    approval = models.BooleanField(default=False)
    p_type = models.CharField(max_length=20)  # project or thesis
    p_name = models.CharField(max_length=50)
    p_description = models.CharField(max_length=500)
    vision = models.CharField(max_length=500)
    charter = models.CharField(max_length=250)

    def __str__(self):
        return self.p_name

Я ожидаю, что all_primary_info.approval будет "true"

1 Ответ

1 голос
/ 13 апреля 2019

Проблема заключается в вашем взгляде на эту строку

if all_primary_info.approval == 'False':

В вашей модели вы определили approval как логическое поле, но в приведенной выше строке вы использовали 'False', который является строкой, а НЕ логическим, потому что вы заключили его в одну кавычку. Фактически вы спрашиваете Джанго, что if <Boolean Value> == <String Value>, который всегда оценивается как false, и, следовательно, код в условии if не выполняется. Чтобы исправить это, вам нужно удалить кавычки вокруг False. Таким образом, ваша строка кода должна быть

if all_primary_info.approval is False:

    # Do your stuff like this
    # all_primary_info.approval(True) is not correct. 
    # You can simply perform a .save on model instance to update the value

    all_primary_info.approval = True
    all_primary_info.save()

Надеюсь, это решит вашу проблему.

...