【问题标题】:Django CreateView - setting required field automatically - not workingDjango CreateView - 自动设置必填字段 - 不起作用
【发布时间】:2018-02-23 11:22:00
【问题描述】:

我正在尝试以编程方式设置电路的值,而不是我的表单中的一个选项。

我之前使用form_valid做过这个,但我刚刚意识到由于电路值是必需的,那么表单可能无效以添加字段?

目前,当我将 form.errors 输出到我的模板时,我得到电路字段是必需的

这里是风景

class AddFile(CreateView):
    form_class = FileForm
    template_name = "circuits/file_form.html"

    @method_decorator(user_passes_test(lambda u: u.has_perm('circuitfiles.add_file')))
    def dispatch(self, *args, **kwargs):
        self.site_id = self.kwargs['site_id']
        self.circuit_id = self.kwargs['circuit_id']
        self.refer = self.kwargs['refer']
        self.site = get_object_or_404(SiteData, pk=self.site_id) 
        self.circuit = get_object_or_404(Circuits, pk=self.circuit_id) 
        return super(AddFile, self).dispatch(*args, **kwargs)

    def get_success_url(self, **kwargs):         
        return reverse_lazy("circuits:edit_circuit", args=(self.circuit_id, self.site_id, self.refer))

    def form_valid(self, form):
        form.instance.circuit = self.circuit
        return super(AddFile, self).form_valid(form)

    def get_form_kwargs(self, *args, **kwargs):
        kwargs = super().get_form_kwargs()
        kwargs['is_add'] = True 
        return kwargs

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['SiteID']=self.site_id
        context['circuit_id']=self.circuit_id
        context['circuit_name']='{} {}'.format(self.circuit.provider.provider,self.circuit.circuit_type.circuit_type)
        context['SiteName']=self.site.location
        context['refer']=self.refer
        context['FormType']='Add'
        context['active_circuits']='class="active"'

        return context

这是表格:

类 FileForm(forms.ModelForm): 元类: 模型 = 站点文件 字段 = ['site_image', 'site_file', 'file_name','file_type']

def __init__(self, *args, **kwargs):
    super(FileForm, self).__init__(*args, **kwargs)
    self.helper = FormHelper(self)
    self.helper.form_id = 'file_form'
    self.helper.form_method = 'POST'
    self.helper.add_input(Submit('submit', 'Save', css_class='btn-primary'))
    self.helper.layout = Layout(
        Div(    
            Div(
                Div(
                    Div(HTML('<i class="fa fa-camera-retro fa-fw"></i> Add File or Photo'), css_class='panel-heading'),
                    Div(
                        Field('site_image', placeholder='Image'),
                        Field('site_file', placeholder='File'),
                        Field('file_name', placeholder='Display Name'),
                        Div('file_type', title="File Type"),
                        css_class='panel-body'
                    ),
                css_class='panel panel-default',
                ),
            css_class='col-lg-3'
            ),
        css_class='row'
        ),
    )

【问题讨论】:

    标签: django


    【解决方案1】:
    class FileForm(forms.Form):
        circuit = forms.WhateverField(required=False)
    
        def save(self, *args, **kwargs):
             circuit_value = my_value
             # or circuit_value = kwargs.pop('my_key')
    
             if not circuit_value:
                 raise SomeError
    
             self.circuit = circuit_value
             super(MakeATransferForm, self).__save__(*args, **kwargs)
    
    class AddFile(CreateView):
        ...
        def post/dispatch():
             self.form.save(my_key=self.circuit)
    

    【讨论】:

    • 我在问题中添加了 forms.py,我正在使用 ModelForm
    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    相关资源
    最近更新 更多