python - 'str' 对象没有使用 widget_tweaks 的属性 'field'
问题描述
这个问题已经出现了很多次,但都缩小到了他们的具体问题。我希望这个问题可以更多地澄清问题,因此它将变得更普遍有用,而不仅仅是缩小到我的问题。
我得到错误'str' object has no attribute 'field'
我得到了以下代码
template.html
{% load widget_tweaks %}
<form action="." method="POST">
{% render_field form.co_nip_number name="co_nip_number" class="form-control" type="number" required="" %}
</form>
forms.py
from django import forms
from .models import BusinessContact
class BusinessContactForm(forms.Form):
class Meta:
model = BusinessContact
fields = 'co_nip_number'
models.py
from django.db import models
class BusinessContact(models.Model):
co_nip_number = models.CharField(max_length=10)
urls.py
from django.urls import path
from . import views
app_name = 'dashboard'
urlpatterns = [
path('new-client/', views.NewClient.as_view(), name='new-client'),
]
views.py
from django.views.generic import FormView
from django.http import HttpResponse
from .forms import BusinessContactForm
class NewClient(FormView):
template_name = 'dashboard/new-client.html'
form_class = BusinessContactForm
def form_valid(self, form):
form.save()
return HttpResponse('You managed')
TRACEBACK
Traceback (most recent call last):
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 145, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 143, in _get_response
response = response.render()
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/response.py", line 105, in render
self.content = self.rendered_content
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/response.py", line 83, in rendered_content
return template.render(context, self._request)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/base.py", line 171, in render
return self._render(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/Users/jannicklangkjaer/PycharmProjects/penge/venv/lib/python3.8/site-packages/widget_tweaks/templatetags/widget_tweaks.py", line 220, in render
bounded_field.field.widget.input_type = v.resolve(context)
AttributeError: 'str' object has no attribute 'field'
这个错误是什么意思?我们如何解决它?
感谢您的时间
解决方案
forms.py
我在您的代码中发现了两个错误。
- 您正在使用
Form
而不是ModelForm
- 您正在设置字段,
string
但需要使用tuple
或设置list
请使用以下代码更新您的forms.py
代码
from django import forms
from .models import BusinessContact
class BusinessContactForm(forms.ModelForm):
class Meta:
model = BusinessContact
fields = ('co_nip_number',)
我已经测试了上面的代码,它解决了问题并成功呈现了该字段。
推荐阅读
- django - Django 项目 POST 和 GET 请求不适用于 Nginx 和 Gunicorn
- angular - Angular 在 Component1 上执行从 component2 触发的方法(不相关的组合)
- html - 在引导程序中为列创建可扩展的重复背景
- html - 分页引导类剂量工作如何解决这个问题
- flutter - 空格字符不适用于表格图形
- python - 如何从字典列表中获取值为此创建一个函数
- wordpress - 根据 Woocommerce 中的城市显示交货时间
- dictionary - 平面地图中的 Groovy 字符串操作
- java - 如何在 Apache spark java 中将行从 csv 转换为 ArrayType?
- python - 从发送到 FastAPI 应用程序的请求正文中提取列表