Django-使用pk URL重新定义表格选择

问题描述 投票:0回答:1

我需要使用URL发送的pk设置输入(选择)值。

使用init形式,几乎可以得到答案,但是init方法执行两次并清除我的值。

表格:

class CrearDelitoForm(forms.ModelForm):
    class Meta:
        model = Delito
        exclude = ()

    def __init__(self, numero_pk = None, *args, **kwargs):
        super(CrearDelitoForm, self).__init__(*args, **kwargs)
        self.fields["imputado"].queryset = Imputado.objects.filter(numero_id = numero_pk)

DelitoFormset = inlineformset_factory(
    Expediente,
    Delito,
    form=CrearDelitoForm,    
    extra=1,
    can_delete=True,
    fields=('imputado', 'delito', 'categoria'),
    } 
)

观看次数:

class CrearDelito(CreateView):
    model = Delito
    form_class = CrearDelitoForm
    template_name = 'crear_delito.html'

    def get_context_data(self,**kwargs):
        context = super().get_context_data(**kwargs)
        context['formset'] = DelitoFormset()        
        context['expedientes'] = Expediente.objects.filter(id = self.kwargs['pk'])
        return context

    def get_form_kwargs(self, **kwargs):
        kwargs['numero_pk'] = self.kwargs['pk']
        return kwargs

**系统检查未发现任何问题(0静音)。2020年6月8日-11:33:57Django 2.2.12版,使用设置“ red.settings”在http://127.0.0.1:8000/启动开发服务器使用CTRL-BREAK退出服务器。,

**

我认为问题出在context = super()。get_context_data(** kwargs)

,但不知道为什么。
django forms url select init
1个回答
0
投票

A CreateView创建一个表格,即您在form_class中指定的表格。它将进一步将request.POSTrequest.FILES传递给表单,因此您不必自己构造一个表单集,但让CreateView这样做:

class CrearDelito(CreateView): model = Delito form_class = DelitoFormset template_name = 'crear_delito.html' def get_context_data(self,**kwargs): context = super().get_context_data(**kwargs) context['expedientes'] = Expediente.objects.filter(id=self.kwargs['pk']) context['formset'] = context['form'] return context def get_form_kwargs(self, **kwargs): form_kwargs = super().get_form_kwargs(**kwargs) form_kwargs['form_kwargs'] = {'numero_pk': self.kwargs['pk']} return kwargs
© www.soinside.com 2019 - 2024. All rights reserved.