Переопределяю queryset поля формы путем передачи дополнительного аргумента (
employee_pk) из метода get_form_kwargs в метод __init__ формы. Пробую 2-мя способами, оба не работают.
Первый:
class SkillTestCreateView(AuthorizedMixin, CreateView):
model = Skill
form_class = SkillGroupCreateForm
template_name = 'skill_create.html'
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['employee_pk'] = self.kwargs['pk']
return kwargs
def get_context_data(self, **kwargs):
print(self.kwargs['pk']) ---> выводит нужный id
context = super(SkillTestCreateView, self).get_context_data(**kwargs)
forms.pyclass SkillGroupCreateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.employee_pk = kwargs.pop('employee_pk', None) #
super(SkillGroupCreateForm, self).__init__(*args, **kwargs)
self.fields['technology'].required = False
if self.employee_pk:
self.fields['technology'].queryset = Technology.objects.exclude(skill__employee_id=self.employee_pk)
Второй способ:
class SkillCreateView(AuthorizedMixin, CreateView):
model = Skill
form_class = SkillCreateForm
template_name = 'employee_info_create.html'
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs.update(employee_pk=self.kwargs['pk'])
return kwargs
forms.py
class SkillCreateForm(forms.ModelForm):
def __init__(self, *args, employee_pk=None, **kwargs):
super().__init__(*args, **kwargs)
if employee_pk is not None:
self.fields['technology'].queryset = Technology.objects.exclude(
skill__employee_id=employee_pk
)
Оба раза employee_pk=None