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