簡體   English   中英

Django表單-字段為純文本,CharField沒有屬性'is_hidden'

[英]Django forms - field as plain text, CharField has no attribute 'is_hidden'

我想僅使用forms.py將字段顯示為純文本,並在此處找到要使用的代碼段

from django.utils.safestring import mark_safe

class PlainTextWidget(forms.Widget):
    def render(self, _name, value, _attrs=None):
        return mark_safe(value) if value is not None else '-'

然后在我的forms.py中我就這樣使用它

class DeleteSiteForm(forms.ModelForm):
    class Meta:
        model = SiteData
        fields = ['location']
        widgets = {
            'location' : forms.CharField(widget=PlainTextWidget),
        }

當我加載頁面時出現錯誤:

Traceback:

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python3.6/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/itapp/itapp/sites/views.py" in delete_site
  875.     from sites.forms import DeleteSiteForm

File "/itapp/itapp/sites/forms.py" in <module>
  136. class DeleteSiteForm(forms.ModelForm):

File "/usr/local/lib/python3.6/site-packages/django/forms/models.py" in __new__
  266.                 apply_limit_choices_to=False,

File "/usr/local/lib/python3.6/site-packages/django/forms/models.py" in fields_for_model
  182.             formfield = f.formfield(**kwargs)

File "/usr/local/lib/python3.6/site-packages/django/db/models/fields/__init__.py" in formfield
  1110.         return super(CharField, self).formfield(**defaults)

File "/usr/local/lib/python3.6/site-packages/django/db/models/fields/__init__.py" in formfield
  891.         return form_class(**defaults)

File "/usr/local/lib/python3.6/site-packages/django/forms/fields.py" in __init__
  228.         super(CharField, self).__init__(*args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/django/forms/fields.py" in __init__
  109.         extra_attrs = self.widget_attrs(widget)

File "/usr/local/lib/python3.6/site-packages/django/forms/fields.py" in widget_attrs
  246.         if self.max_length is not None and not widget.is_hidden:

Exception Type: AttributeError at /sites/delete_site/99
Exception Value: 'CharField' object has no attribute 'is_hidden'

是什么原因導致此錯誤,因為我在任何地方都看不到該屬性設置?

編輯:

我認為現在修復小部件可能會破壞松脆的形式嗎? 同樣值得一提的是我的實際目標。 我希望有一個刪除頁面的提示,就像我們在用戶刪除記錄時在django admin中看到的那樣,除了我當前正在執行的操作之外,還有其他簡單的方法嗎?

謝謝

模板錯誤:

In template /usr/local/lib/python3.6/site-packages/crispy_forms/templates/bootstrap3/field.html, error at line 28
   render() got an unexpected keyword argument 'name'   18 : 
   19 :         {% if field|is_checkboxselectmultiple %}
   20 :             {% include 'bootstrap3/layout/checkboxselectmultiple.html' %}
   21 :         {% endif %}
   22 : 
   23 :         {% if field|is_radioselect %}
   24 :             {% include 'bootstrap3/layout/radioselect.html' %}
   25 :         {% endif %}
   26 : 
   27 :         {% if not field|is_checkboxselectmultiple and not field|is_radioselect %}
   28 :              {% if field|is_checkbox and form_show_labels %} 
   29 :                 <label for="{{ field.id_for_label }}" class="{% if field.field.required %} requiredField{% endif %}">
   30 :                     {% crispy_field field %}
   31 :                     {{ field.label|safe }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %}
   32 :                 </label>
   33 :                 {% include 'bootstrap3/layout/help_text_and_errors.html' %}
   34 :             {% else %}
   35 :                 <div class="controls {{ field_class }}">
   36 :                     {% crispy_field field %}
   37 :                     {% include 'bootstrap3/layout/help_text_and_errors.html' %}
   38 :                 </div>


Traceback:

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python3.6/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/itapp/itapp/sites/views.py" in delete_site
  891.         'delete_site_form': form,    

File "/usr/local/lib/python3.6/site-packages/django/shortcuts.py" in render
  30.     content = loader.render_to_string(template_name, context, request, using=using)

File "/usr/local/lib/python3.6/site-packages/django/template/loader.py" in render_to_string
  68.     return template.render(context, request)

File "/usr/local/lib/python3.6/site-packages/django/template/backends/django.py" in render
  66.             return self.template.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render
  207.                     return self._render(context)

File "/usr/local/lib/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
  107.     return self.nodelist.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/loader_tags.py" in render
  177.             return compiled_parent._render(context)

File "/usr/local/lib/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
  107.     return self.nodelist.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/loader_tags.py" in render
  72.                 result = block.nodelist.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/local/lib/python3.6/site-packages/crispy_forms/templatetags/crispy_forms_tags.py" in render
  199.         c = self.get_render(context).flatten()

File "/usr/local/lib/python3.6/site-packages/crispy_forms/templatetags/crispy_forms_tags.py" in get_render
  118.                 actual_form.form_html = helper.render_layout(actual_form, node_context, template_pack=self.template_pack)

File "/usr/local/lib/python3.6/site-packages/crispy_forms/helper.py" in render_layout
  308.             template_pack=template_pack

File "/usr/local/lib/python3.6/site-packages/crispy_forms/layout.py" in render
  140.         return self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)

File "/usr/local/lib/python3.6/site-packages/crispy_forms/layout.py" in get_rendered_fields
  104.             for field in self.fields

File "/usr/local/lib/python3.6/site-packages/crispy_forms/layout.py" in <genexpr>
  104.             for field in self.fields

File "/usr/local/lib/python3.6/site-packages/crispy_forms/utils.py" in render_field
  148.             html = template.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/backends/django.py" in render
  66.             return self.template.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render
  207.                     return self._render(context)

File "/usr/local/lib/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
  107.     return self.nodelist.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/defaulttags.py" in render
  322.                 return nodelist.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/defaulttags.py" in render
  322.                 return nodelist.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/defaulttags.py" in render
  322.                 return nodelist.render(context)

File "/usr/local/lib/python3.6/site-packages/django/template/base.py" in render
  993.             bits.append(force_text(bit))

File "/usr/local/lib/python3.6/site-packages/django/utils/encoding.py" in force_text
  76.                     s = six.text_type(s)

File "/usr/local/lib/python3.6/site-packages/django/utils/html.py" in <lambda>
  385.         klass.__str__ = lambda self: mark_safe(klass_str(self))

File "/usr/local/lib/python3.6/site-packages/django/forms/boundfield.py" in __str__
  41.         return self.as_widget()

File "/usr/local/lib/python3.6/site-packages/django/forms/boundfield.py" in as_widget
  127.             **kwargs

Exception Type: TypeError at /sites/delete_site/99
Exception Value: render() got an unexpected keyword argument 'name'

小部件字典應該只包含小部件,而不包含字段。

    widgets = {
        'location' : PlainTextWidget,
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM