1

この問題の解決策が必要です:

「値」フィールドに MultiField ウィジェットが必要です。このフィールドには 2 つの値 (2 つの入力ウィジェット) を入力できる必要があり、ユーザーはこれらの値のどちらを保存するかを選択する必要があります (2 つのチェックボックス ウィジェット)。ただし、これらの値の 1 つを他のフィールドの値に対して再計算する必要があります。

私はこのアプローチを取りました: MultiValueField4 つのフィールドを持つ 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 は価格ではなく、製品またはサービスに割り当てられるため)。製品は多くの価格を持つことができるため、価格は外部キーによって製品にバックリンクされます。

乾杯、トメック

4

1 に答える 1

0

で探している機能MultiValueField(サブフィールドを個別に必須にするかどうかを許可する) は、 Django の機能リクエストとして記録されます。

おそらく、バグ レポートの元の提案と次の提案に基づいてMultiValueField書き直されたメソッドでサブクラス化することで、これを修正できます。cleanただし、その時点までに元のファイルがあまりMultiValueField残っていない場合は、パッチを Django に提出し、バグにメモを残す必要があります。

必要性のことは少し無視しますが、compressメソッドを作成しましたPriceDetailFieldか? それはどのように見えますか?ここで、4 つのサブフィールドを 1 つのフィールドに変換して保存する作業を行う必要があります。

于 2011-09-07T23:34:42.750 に答える