Django中的HTML POST表单在提交时发出TypeError

时间:2017-04-25 06:20:21

标签: python django

我尝试从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;

我做错了什么?

2 个答案:

答案 0 :(得分:1)

  

使用API​​View类与使用常规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" 

您收到此错误是因为您尝试将非整数值作为字符串传递