Estoy tratando de obtener la entrada del usuario de un formulario HTML y usar ese valor para completar un gráfico ChartJS en mi aplicación Django llamada DisplayData que tiene una plantilla llamada Display.html. Tengo el siguiente formulario en mi proyecto.
Pantalla.html
<div class="row"> <form method="POST"> {% csrf_token %} <input type="text" name="textfield"> <button type="submit">Submit</button> </form> </div>En mi archivo de vistas, tengo el siguiente código para obtener los datos de este formulario:
vistas.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)Mis direcciones URL están configuradas de la siguiente manera.
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'), ]Cuando entro en el formulario de la página, escribo un número y presiono enviar, en mi consola aparece el siguiente error:
TypeError: el argumento int() debe ser una cadena, un objeto similar a bytes o un número, no 'NoneType'
¿Qué estoy haciendo mal?
Usar la clase APIView es prácticamente lo mismo que usar una clase View regular, como de costumbre, la solicitud entrante se envía a un método de manejo apropiado como .get() o .post()
Si está haciendo una solicitud POST . Tiene que hacer
def post(self, request, format=None): #rest of code display_id = request.POST.get("textfield") error con esta línea. te estás perdiendo a ti self . aquí está devolviendo NoneType. Y cambia tu método para 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"Obtuviste este error porque estás tratando de pasar un valor no entero como una cadena.