Имам нужда от решение за този проблем:
Бих искал да имам притурка MultiField за поле „стойност“. Това поле трябва да позволява въвеждането на две стойности (два уиджета за въвеждане) и потребителят трябва да избере коя от тези стойности да бъде запазена (два уиджета в полето за отметка). Една от тези стойности обаче трябва да бъде преизчислена по отношение на стойността на друго поле.
Възприех този подход: MultiValueField
с 4 полета:
class PriceDetailField(MultiValueField):
use_net = BooleanField(required=False)
net_value = DecimalField(required=False, decimal_places=2)
use_gross = BooleanField(required=False)
gross_value = DecimalField(required=False, decimal_places=2)
MultiWidget:
class PriceDetailWidget(MultiWidget):
use_net = CheckboxInput()
net_value_widget = TextInput()
use_gross = CheckboxInput()
gross_value_widget = TextInput()
и персонализирана форма...
class PriceModelForm(ModelForm):
value = PriceDetailField()
... което замества формата на модела по подразбиране за модел:
class Price(models.Model):
value = models.DecimalField(
max_digits=19,
decimal_places=2,
default=Decimal(0),
)
Това решение обаче изглежда объркано. Във формуляра трябва да въведа всички подполета (подполетата MultiValueField
), в противен случай се появява грешка „Моля, въведете стойност“ (въпреки че тези полета са маркирани като required=False
). Освен това трябва да преизчисля споменатата стойност при запазване, след като върнах кортеж от полето с информация кое квадратче за отметка е отметнато и съответната текстова стойност, след което заменя кортежа с десетичната стойност в clean_value
метода на формуляра (също запазване на квадратчетата за отметка състояние във временни полета....). Мисля, че такъв дизайн е много слаб.
Формулярът трябва да работи както самостоятелно, така и като вграден (това означава, че стойността на полето, което се използва за изчисляване на върнатата стойност, може или не може да се промени по време на запис).
Възможно ли е изобщо такова нещо?
И коренът на проблема: искам да съхранявам цените на артикулите като нетни цени, но бих искал да позволя на потребителите да ги въвеждат като нетни или брутни цени и след това да преизчислят брутната цена към нетната цена по отношение на нивото на ДДС на продукта ( тъй като ДДС се начислява на продукт или услуга, а не на цената). Един продукт може да има много цени, така че цената е обратно свързана с продукта чрез външен ключ.
Наздраве, Томек