save () запрещено предотвращать потерю данных из-за несохраненного связанного объекта 'xxxxxxxx' - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь создать логику в 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' Я думаю, что это неправильный способ закрыть открытый экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...