繁体   English   中英

排除/隐藏以脆皮形式呈现的Django形式的字段

[英]Exclude/hide a field in Django form rendered with crispy-forms

我有两个具有相同表单的模板,但是在一页上我不希望显示“照片”字段。 问题是我的表单是通过FormHelper描述的酥脆表单。 如何隐藏/排除/删除“照片”字段和FormActions(按钮)? 提前致谢。

views.py:

    def user_data_view(request):
        model_values = UserData.objects.order_by('last_name')[0]
        form = User_data_form(initial={
            'name':model_values.name,
            'last_name':model_values.last_name,
            'birth_date':model_values.birth_date,
            'bio':model_values.bio,
            'email':model_values.email,
            'jabber':model_values.jabber,
            'skype':model_values.skype,
            })
       context = {
           'form':form,
       }
       return render(request, 'home.html', context)

表格

class User_data_form(forms.ModelForm):
class Meta:
    model = UserData
    fields = ['name', 'last_name', 'birth_date', 'bio', 'email', 'jabber','skype', 'photo']

def __init__(self, *args, **kwargs):
    super(User_data_form, self).__init__(*args, **kwargs)

    self.helper = FormHelper()

    self.helper.form_id = 'data-fields'
    self.helper.form_method = 'POST'
    self.helper.form_tag = True
    self.helper.layout = Layout(
        Div(
            Div('name', 'last_name', 'birth_date','email', 'jabber','skype','bio', css_class='col-md-6'),
            Div('photo', css_class='col-md-6'),
            HTML('<img src="{{ url_photo }}" id="photo-preview" class="pull-right form-inline">'),

        ),
        FormActions(
        Submit('save_changes', 'Save', css_class='btn btn-success'),

        )

    )

template.html

<form id="form" action="">{% csrf_token %}
{% crispy form %}
</form>

更新:

我这样重写Forms.py代码:

class FormMixin(forms.ModelForm):
class Meta:
    model = UserData
    fields = ['name', 'last_name', 'birth_date', 'bio', 'email', 'jabber','skype', 'photo']

def __init__(self, *args, **kwargs):
    super(FormMixin, self).__init__(*args, **kwargs)

    self.helper = FormHelper()

    self.helper.form_id = 'data-fields'
    self.helper.form_method = 'POST'
    self.helper.form_tag = True
    self.helper.layout = Layout(
        Div(
            Div('name', 'last_name', 'birth_date','email', 'jabber','skype','bio', css_class='col-md-6'),
            Div('photo', css_class='col-md-6'),
            HTML('<img src="{{ url_photo }}" id="photo-preview" class="pull-right form-inline">'),
        ),
        FormActions()
        )

class User_data_form(FormMixin):

def __init__(self, *args, **kwargs):
    super(User_data_form, self).__init__(*args, **kwargs)
    self.helper = FormHelper()
    self.helper.layout = Layout(
        Div(),
        FormActions(
        Submit('save_changes', 'Save', css_class='btn btn-success'),
        )
    )

class InitialForm(FormMixin):
class Meta:
    model = UserData
    exclude = ['photo']
def __init__(self, *args, **kwargs):
    super(InitialForm, self).__init__(*args, **kwargs)

但是现在我在第二个模板的表单顶部有“提交”按钮。 如何重组代码以将按钮放置在表单下方?

不是最好的决定,但是...

在您要隐藏照片的模板中,只需插入如下内容:

 <script> document.onLoad(function(){document.getElementById('form').getElementsByTagName('img')[0].style = 'display:none';
}) </script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM