Что не означает None в django / python? - PullRequest
0 голосов
/ 30 марта 2019

Я хочу отобразить недопустимое сообщение, когда мое поле формы HTML пусто. Но приведенный ниже код запускает блок if, если поле пустое, и блок else, если поле не пустое.

Я написал это так, потому что это, кажется, делает работу. Но я в замешательстве. Не должно ли быть наоборот?

if(request.POST['amount'] is not None):

   os.remove(os.path.join(settings.MEDIA_ROOT,str(uploaded_file.name) ))
            messages.success(request,('Invalid Field....'))
            return redirect('assignFine')
else:
   form = Fine(amount=request.POST['amount'],numberPlate=num,policeUsername=request.user)
            form.save()

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Это условие:

if request.POST['amount'] is not None:

Означает: если параметр существует ( не None), выполните приведенный ниже блок, в противном случае выполните else часть.Чтобы это имело смысл, если существует amount, мы должны создать Fine, в противном случае мы сообщаем об ошибке.Ваши условия кажутся измененными!

В зависимости от ожидаемых значений параметра amount, я бы также рассмотрел использование этой версии:

if request.POST['amount']:
  # create fine
else:
  # signal an error

Это короче и означает: еслиamount - это , а не None, или '', или False, или 0, или любые другие значения Falsey в Python, выполните приведенный ниже блок, в противном случае выполните часть else.

0 голосов
/ 30 марта 2019

Вы можете использовать приведенную ниже фразу, чтобы проверить, существует ли параметр amount в request.POST:

if 'amount' in request.POST:
    # Your code
else:
    # Else case

Вы можете использовать оператор not in, чтобы иметь отрицательную фразу if / else:

if 'amount' not in request.POST:
    # No 'amount' available
else:
    # There is 'amount' parameter

[Редактировать]

И чтобы проверить, не является ли значение empty, False или None, вы можете проверить его следующим образом:

if 'amount' in request.POST and request.POST['amount']:
    # 'amount' exists, and is not 'empty', 'False', or 'None'
...