Я пытаюсь добавить подтверждение в форму.
- Проверка 1: количество_темпов должно быть больше 0.
- Проверка 2: источник и пункт назначения должны отличаться
- Проверка 3: количество_модем должно быть меньше количества вместоположение источника.
Код ошибки
# NOTE: Overriding the default method
def clean(self):
cleaned_data = super().clean()
source = str(cleaned_data['source'])
destination = str(cleaned_data['destination'])
quantity_moved = cleaned_data['quantity_moved']
item = cleaned_data['item']
# Checking if the source and destination are same
if destination == source:
msg = 'エラー:移動先と移動元が同じです。'
self.add_error('source', msg)
self.add_error('destination', msg)
# Checking if the quantity to move is more than the current stock at the source location
max_qty = ActualStock.objects.filter(item=item, location=cleaned_data['source'])[0].current_stock
print(">" * 80, max_qty)
if quantity_moved > max_qty:
msg = "エラー:移動元に商品の数は足りません。現在, {0}に {1}の数は {2} です。".format(source, item, max_qty)
self.add_error('quantity_moved', msg)
return cleaned_data
Теперь, во время тестирования, если я ввожу одинаковые значения для источника и назначения (оба выбираются из соответствующих раскрывающихся списковкоторый указывает ту же таблицу в БД), я получаю KeyError.
Теперь, если я изменю порядок проверок, которые я выполняю, как показано ниже, код работает.
Рабочий код:
# NOTE: Overriding the default method
def clean(self):
cleaned_data = super().clean()
source = str(cleaned_data['source'])
destination = str(cleaned_data['destination'])
quantity_moved = cleaned_data['quantity_moved']
item = cleaned_data['item']
# Checking if the quantity to move is more than the current stock at the source location
max_qty = ActualStock.objects.filter(item=item, location=cleaned_data['source'])[0].current_stock
print(">" * 80, max_qty)
if quantity_moved > max_qty:
msg = "エラー:移動元に商品の数は足りません。現在, {0}に {1}の数は {2} です。".format(source, item, max_qty)
self.add_error('quantity_moved', msg)
# Checking if the source and destination are same
if destination == source:
msg = 'エラー:移動先と移動元が同じです。'
self.add_error('source', msg)
self.add_error('destination', msg)
return cleaned_data
Как я уже сказал, мне удалось исправить ошибку, но я не понимаю, что исправило ошибку здесь.Хотите знать, если кто-то может пролить немного света.