私はinlineformset_factory
、クライアントとセッションの間の多対多の関係のためのフィールドを作成するために使用しており、中間の出席モデルを使用しています。
ビューファイルには次のものがあります。
AttendanceFormset = inlineformset_factory(
Session,
Attendance,
formset=BaseAttendanceFormSet,
exclude=('user'),
extra=1,
max_num=10,
)
session = Session(user=request.user)
formset = AttendanceFormset(request.POST, instance=session)
また、フォーム フィールドの 1 つをオーバーライドする必要があったため、フォームセットの基本クラスに以下を追加しました。
class BaseAttendanceFormSet(BaseFormSet):
def add_fields(self, form, index):
super(BaseAttendanceFormSet, self).add_fields(form, index)
form.fields['client'] = forms.ModelChoiceField(
queryset=Client.objects.filter(user=2))
これで、フォームは正しく機能しますが、ID 2 を使用するだけでなく、現在のユーザーに基づいて表示されるクライアントをフィルター処理できるように、フォームセットに値を渡す必要があります。
誰でも助けることができますか?
アドバイスをいただければ幸いです。
ありがとう。
編集
読んでいる人にとって、これは私のために働いたものです:
def get_field_qs(field, **kwargs):
if field.name == 'client':
return forms.ModelChoiceField(queryset=Client.objects.filter(user=request.user))
return field.formfield(**kwargs)