I overrode the form_valid method on my RobotDetail
view but whenever I try to use the view I get the error The view dashboard.views.RobotDetail didn't return an HttpResponse object. It returned None instead.
If anybody knows how to fix this it would be super appreciated!
VIEW
from django.shortcuts import render
from django.views.generic import ListView, DetailView, UpdateView
from .models import Robot
from .forms import RobotUpdateForm
import socket
import threading
HEADER = 64
PORT = 6060
SERVER = socket.gethostbyname(socket.gethostname())
ADDR = (SERVER, PORT)
FORMAT = 'utf-8'
DISCONNECT_MESSAGE = "!DISCONNECT!"
class RobotDetail(UpdateView):
model = Robot
form_class = RobotUpdateForm
template_name = 'dashboard/robotdetail.html'
def form_valid(self, form):
self.object = form.save()
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(ADDR)
def send(msg):
message = msg.encode(FORMAT)
length = len(message)
send_length = str(msg_length).encode(FORMAT)
send_length += b' ' * (HEADER - len(send_length))
client.send(send_length)
client.send(message)
send("Hello World!")
send("Hello Andrew")
send("Hello")
send(DISCONNECT_MESSAGE)
MODEL
class Robot(models.Model):
def fetch_choices():
scope = [REDACTED]
creds = ServiceAccountCredentials.from_json_keyfile_name("dashboard/Files/creds.json", scope)
client = gspread.authorize(creds)
sheet = client.open("tutorial").sheet1
path_names = []
path_name_fetch = sheet.col_values(1)
for i in path_name_fetch:
if (i, i) not in path_names:
path_names.append((i, i))
return path_names
name = models.CharField(max_length=200)
path_options = models.CharField(choices=fetch_choices(), default=fetch_choices(), max_length=100)
status_choices = [('waiting', 'waiting'), ('running', 'running'), ('stuck', 'stuck')]
current_status = models.CharField(choices=status_choices, default=status_choices[0], max_length=100)
def __str__(self):
return self.name + ' | Current Status: ' + self.current_status
def get_absolute_url(self):
return reverse('dashboard-home')
TEMPLATE
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dashboard</title>
</head>
<body>
{% extends 'theblog/base.html' %}
{% block content %}
<h1>Dispatcher</h1>
<form method="POST">
{% csrf_token %}
{{ form.as_p}}
<button class="btn btn-secondary">Dispatch</button>
</form>
{% endblock %}
</body>
</html>
