@emeraldsinner

Как передать переменную из get_context_data в def __init__?

Есть UpdateView и ModelForm, нужно передать переменную из вьюхи в форму, моя вьюха:
class EditBranchView(UpdateView):
    model = Branches
    template_name = 'branches/edit.html'
    form_class=EditBranchForm

    def get_context_data(self, *args,  **kwargs):
        context = super(EditBranchView, self).get_context_data(**kwargs)
        if self.request.POST:
            context['form'] = EditBranchForm(self.request.POST, instance=self.object, request=self.request, pk = self.kwargs['pk'])
            context['phones_form'] = BranchPhonesFormSet(self.request.POST, instance=self.object)
        else:
            context['form'] = EditBranchForm(instance=self.object, request=self.request, pk = self.kwargs['pk'])
            context['phones_form'] = BranchPhonesFormSet(instance=self.object)
        return context


и форма:
class EditBranchForm(forms.ModelForm):
    regions=forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple) 
    owner = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Profiles.objects.all())

    def __init__(self, request, pk, *args, **kwargs):
        super(EditBranchForm, self).__init__(*args, **kwargs)
        self.pk = pk
        self.request = request
        self.fields['owner'].queryset = Profiles.objects.filter(pid=self.request.user.id)
        self.fields['regions'].choices = self.request.user.organization.organizationtoregion_set.all().values_list('region__id', 'region__region_name')


пишет ошибку:
__init__() takes at least 3 arguments (1 given)


Подскажите, пожалуйста, что не так. Спасибо.
  • Вопрос задан
  • 2904 просмотра
Пригласить эксперта
Ответы на вопрос 1
@emeraldsinner Автор вопроса
Oscar Django А как правильно принять их в форме? Если пишу так:
def __init__(self, *args, **kwargs):
        #import pdb;pdb.set_trace()
        self.pk = kwargs.pop('pk')
        self.request = kwargs.pop('request')
        super(EditBranchForm, self).__init__(*args, **kwargs)
        self.fields['owner'].queryset = Profiles.objects.filter(pid=self.request.user.id)
        self.fields['regions'].choices = self.request.user.organization.organizationtoregion_set.all().values_list('region__id', 'region__region_name')


Дает ошибку
KeyError 'pk'


Если так:
def __init__(self, *args, **kwargs):
        #import pdb;pdb.set_trace()
        self.pk = kwargs.get('pk')
        self.request = kwargs.get('request')
        super(EditBranchForm, self).__init__(*args, **kwargs)
        self.fields['owner'].queryset = Profiles.objects.filter(pid=self.request.user.id)
        self.fields['regions'].choices = self.request.user.organization.organizationtoregion_set.all().values_list('region__id', 'region__region_name')


То:
__init__() got an unexpected keyword argument 'request'


А если так:
def __init__(self, *args, **kwargs):
        #import pdb;pdb.set_trace()
        super(EditBranchForm, self).__init__(*args, **kwargs)
        self.pk = kwargs.pop('pk')
        self.request = kwargs.pop('request')
        self.fields['owner'].queryset = Profiles.objects.filter(pid=self.request.user.id)
        self.fields['regions'].choices = self.request.user.organization.organizationtoregion_set.all().values_list('region__id', 'region__region_name')


Тогда также:
__init__() got an unexpected keyword argument 'request'


Из get_context_data я убрал переменние.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы