我尝试从HTML表单中获取用户输入,并使用该值填充我的Django应用程序中的ChartJS图形,该应用程序名为DisplayData,其中有一个名为Display.html的模板。我的项目中有以下表格。
Display.html
<div class="row">
<form method="POST">
{% csrf_token %}
<input type="text" name="textfield">
<button type="submit">Submit</button>
</form>
</div>
在我的视图文件中,我有以下代码从此表单中获取数据:
views.py
class ChartData(APIView):
authentication_classes = []
permission_classes = []
display_id = 0
def post(self, request, format=None):
display_id = self.request.POST.get("textfield")
try:
display_id = int(display_id)
except ValueError:
display_id = 2
def get(self, request, format=None):
display_id = self.request.GET.get("textfield")
all_entries = models.Entries.objects.all().filter(parent=display_id) #change to input from text box via display_id
all_id = models.Entries.objects.all().values_list('id', flat=True)
all_measurables = models.Measurables.objects.all().filter(user_id=request.user.id) #change to current user
all_times = [m.timestamp for m in all_entries]
all_data = []
for m in all_entries:
data = m.data
json_data = json.loads(data)
value = json_data['value']
all_data.append(value)
data = {
"labels": all_times,
"default": all_data,
}
return Response(data)
我的网址设置如下。
urls.py
from .views import get_data, ChartData
urlpatterns=[
url(r'^$',views.DisplayView, name='DisplayView'),
url(r'^api/data/$', views.get_data, name='api-data'),
url(r'^display/api/chart/data/$', views.ChartData.as_view()),
url(r'^logs/', views.LogDisplay, name='Display-Logs'),
]
当我进入页面中的表单并输入数字并点击提交时,在我的控制台中出现以下错误:
TypeError:int()参数必须是字符串,类似字节的对象或数字,而不是&#39; NoneType&#39;
我做错了什么?
答案 0 :(得分:1)
使用APIView类与使用常规View类几乎相同,像往常一样,传入的请求被分派到适当的处理程序方法,例如.get()或.post()
如果您正在执行POST
请求。您必须执行
def post(self, request, format=None):
#rest of code
答案 1 :(得分:0)
display_id = request.POST.get("textfield")
此行错误。你错过了self
。这里它返回NoneType。并将您的方法更改为post
def post(self, request, format=None):
display_id = self.request.POST.get("textfield")
try:
display_id = int(display_id)
except ValueError:
display_id = "here you give default value"
您收到此错误是因为您尝试将非整数值作为字符串传递