Я пытаюсь создать логику в Django, чтобы проверить, все ли элементы TabularInline
сохранены перед сохранением самой модели. Вот код, который я использую:
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
item_count_in_origin = instance.prc_item.quantity
print(item_count_in_origin)
if instance.quantity > item_count_in_origin:
messages.error(request, 'Quantity is higher than origin branch.')
return
else:
for item in instances:
if item.id is not None:
item.close()
else:
formset.save()
def save_model(self, request, obj, form, change):
if obj.transfer_items.all().count() != 0:
user = request.user
if self.save_formset:
if not change:
obj.solicitor = user
obj.date_solicited = datetime.now()
created_status = Status.objects.get(name=StatusEnum.CREATED)
obj.status = created_status
return super(TransferenceAdmin, self).save_model(request, obj, form, change)
else:
messages.error(request, 'Quantity is higher than origin branch.')
return
когда условие if instance.quantity > item_count_in_origin:
работает правильно и возвращает ошибку, но когда оно ложно, мы переходим к части
for item in instances:
if item.id is not None:
item.close()
else:
formset.save()
происходит сбой с ошибкой save() prohibited to prevent data loss due to unsaved related object 'xxxxxxxx'.
UPDATE
Я изменил if item.id is not None:
на if item.id is None:
, чтобы item.close()
работал только на открытых, но не сохраненных экземплярах.
И ошибка стала 'TransferRequestItem' object has no attribute 'close'
Я думаю, что это неправильный способ закрыть открытый экземпляр.