xand3r_si1k
@xand3r_si1k

Как реализовать автозаполнение дочерних полей и выполнение рассчетов на лету в Django?

Есть модель ТРАНЗАКЦИИ с полями "позиция, наименование, цена, количество, сумма" и модель ДОКУМЕНТЫ с полями "тип документа, название документа, контрагент, тип цен и т.д."

В admin.py ТРАНЗАКЦИИ настроено как admin.TabularInline для ДОКУМЕНТЫ

class transactions_inline_admin(admin.TabularInline):
    model = transactions_ref
    form = transactions_form
    fields = ('position', 'product_name', 'price_value', 'quantity_value', 'total_sum',)
    readonly_fields = ('position',)
    ordering = ['position']
    save_on_top = True

class transactions_admin(ImportExportModelAdmin):
    form = transactions_form
    list_display = ('doc_name', 'position', 'product_name', 'price_value', 'quantity_value', 'total_sum',)
    list_display_links = ('product_name',)
    search_fields = ('doc_name', 'product_name',)
    list_filter = ('doc_name', 'product_name',)
    save_on_top = True
    actions = [docs_price_percent_update, docs_price_natural_update]

    docs_price_percent_update.short_description = 'Змінити ціну на, %%'
    docs_price_natural_update.short_description = 'Змінити ціну на, у.о.'

class documents_admin(ImportExportModelAdmin):
    inlines = [transactions_inline_admin,]
    list_display = ('doc_type', 'doc_name', 'doc_creation_date', 'total_sum',)
    list_display_links = ('doc_name',)
    search_fields = ('=doc_name',)
    list_filter = ('doc_type', 'doc_creation_date',)
    save_on_top = True

    actions = [docs_sum_update, docs_default_state_return]

# admin.site.disable_action('delete_selected')

admin.site.register(documents_ref, documents_admin)
admin.site.register(transactions_ref, transactions_admin)


Как реализовать автозаполнение поля "цена" в зависимости от выбранного значения поля "тип цен" (в таблице с товаром к каждой позиции привязано три типа цены: закупка/опт./розница, так вот одно из этих значений нужно подставить/вытянуть из БД) + после указания значения в поле "количество" подсчитать общую суму по позиции на лету, до нажатия кнопки Save/Сохранить (сейчас подсчет суммы ведется после нажатия кнопки Save)

@receiver(pre_save, sender=transactions_ref)
def some_position_count_sum(sender, **kwargs):
    kwargs['instance'].total_sum = decimal.Decimal(kwargs['instance'].price_value) * decimal.Decimal(kwargs['instance'].quantity_value)


P.S. буду рад любым советам или хотя бы указаниям векторов поиска
  • Вопрос задан
  • 258 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
без JSON не обойтись

вы бы декомпозировали задачу, где там M где V где A и тогда сами бы нашли ответ,
ну или абстрагируйтесь от Джанги, оставив html на фронте и БД на беке
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы