Я использую 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)
И, поскольку мне нужно было переопределить одно из полей формы, я добавил следующее к базовому классу набора форм:
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))
Теперь форма работает правильно, но мне нужно передать значение внабор форм, так что я могу фильтровать клиентов, отображаемых на основе текущего пользователя, а не просто с помощью идентификатора 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)