0
Djangoにインラインフォームセットがあります。そして、私はどのようにmax_value
インスタンスパラメータに基づいてこのフォームセットにあるフォームを設定することができますか。問題は、inlineformset_factory
を使用してフォームセットを作成するときに、フォームのインスタンスではなくクラスを渡すので、そこでパラメータを渡す方法がわかりません。フォームセット作成時にフォームにパラメータを渡す方法
フォームが開始されるときに、そこに渡されるkwargsで利用可能なオブジェクトが既にあります。instance
しかし、いくつかの奇妙な理由のために、私がmax_value
を設定しようとすると何も起こりません。 今、ウィジェットのmax
属性を設定するにはかなり醜い解決策を見つけました。これは動作しますが、正しい方法があるのだろうかと思います。
from .models import SendReceive, Player
from django.forms import inlineformset_factory, BaseFormSet, BaseInlineFormSet
class SRForm(forms.ModelForm):
amount_sent = forms.IntegerField(label='How much to sent?',
required=True,
widget=forms.NumberInput(attrs={'min': 0, 'max': 20})
)
def __init__(self, *args, **kwargs):
super(SRForm, self).__init__(*args, **kwargs)
curmax = kwargs['instance'].sender.participant.vars['herd_size']
self.fields['amount_sent'].widget.attrs['max'] = int(curmax)
class Meta:
model = SendReceive
fields = ['amount_sent']
SRFormSet = inlineformset_factory(Player, SendReceive,
fk_name='sender',
can_delete=False,
extra=0,
form=SRForm,)
formset = SRFormSet(self.request.POST, instance=self.player)
ありがとうございました! もう少し解決しましたが、あなたのソリューションはもっと普遍的に見えます。 ここで私はそれをしました:https://gist.github.com/chapkovski/b6fd6134124d88d671ed7b3b1baa4b81 それで 'max_value'を書き直すのではなく、initのフィールド全体を書き直すだけで十分でした。 –