この問題の解決策が必要です:
「値」フィールドに MultiField ウィジェットが必要です。このフィールドには 2 つの値 (2 つの入力ウィジェット) を入力できる必要があり、ユーザーはこれらの値のどちらを保存するかを選択する必要があります (2 つのチェックボックス ウィジェット)。ただし、これらの値の 1 つを他のフィールドの値に対して再計算する必要があります。
私はこのアプローチを取りました: MultiValueField
4 つのフィールドを持つ a:
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)
マルチウィジェット:
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
フォームの方法でタプルを 10 進数値に置き換えます (また、チェックボックスの状態を保存します)一時的なフィールドで....)。私はそのようなデザインは非常に弱いと思います。
フォームは、単独でもインラインでも機能する必要があります (つまり、戻り値の計算に使用されるフィールドの値は、保存中に変更できる場合と変更できない場合があります)。
そのようなことは可能ですか?
そして問題の根源: 商品の価格を正味価格として保存したいのですが、ユーザーが正味価格または総価格として入力できるようにしてから、製品の VAT 税レベルに関して総価格を正味価格に再計算できるようにしたいと考えています ( VAT は価格ではなく、製品またはサービスに割り当てられるため)。製品は多くの価格を持つことができるため、価格は外部キーによって製品にバックリンクされます。
乾杯、トメック