@Lepilov

Почему не CreateView не передает аргумент в форму?

Переопределяю 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.py
class 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
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
alternativshik
@alternativshik
def get_form_kwargs(self):
        kwargs = super(SkillTestCreateView, self).get_form_kwargs()
        kwargs['employee_pk'] = self.kwargs['pk']
        return kwargs


class SkillGroupCreateForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        employee_pk = kwargs.pop('employee_pk', None) # 
        super(SkillGroupCreateForm, self).__init__(*args, **kwargs)
        self.fields['technology'].required = False
        if employee_pk:
            # Код дальше
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы