4

I am currently using Django and python to create a web app to take meter readings for my company.

I am receiving this error (Title) and I don't know what is causing it. I have

Urls.py:

urlpatterns = [ #Operational URLS path('admin/', admin.site.urls), path('accounts/', include('django.contrib.auth.urls')), path("",include("accounts.urls")), path('home/' , views.home, name='home'), #Complexes #AVONLEA path('avn', views.AvonleaView, name='Avonlea'), path('cavn', views.currentavonleas, name='currentAvonleas'), path('Avonleacsv', views.Avonleacsv, name='Avonleacsv'), path('meter_readings/avonlea/<int:avonleas_pk>', views.viewavonlea, name='viewavonlea' ), path('meter_readings/avonlea/<int:avonleas_pk>/delete', views.deleteavonlea, name='deleteavonlea' ), 

Views.py

from django.shortcuts import render, redirect, get_object_or_404 from django.http import HttpResponse from .forms import AvonleaForm from .models import AvonleaClass from django.contrib import messages from django.views import View #Operational def home(request): return render(request, 'meter_readings/home.html' ) # Complexes #AVONLEA # # # class AvonleaView( View): def get(self,request): created_nums= AvonleaClass.objects.all().values('unitNumber') Aprev = AvonleaClass.objects.all().order_by('-unitDateEntered') previousReading = Aprev[1].newReading # created_nums= AvonleaClass.objects.all() print(created_nums , previousReading) created_nums =[int(i['unitNumber']) for i in created_nums] print(created_nums , previousReading) form = AvonleaForm() return render(request,"meter_readings/avonlea.html",{'form':form , 'created_nums':created_nums , 'name':name, 'previousReading' : previousReading }) def post(self,request): created_nums= AvonleaClass.objects.all().values_list('unitNumber') print(created_nums) form = AvonleaForm(request.POST) if form.is_valid(): form.save() return redirect('unt-url' , name ) messages.success(request , 'creates successfully ') else: return render(request, 'meter_readings/avonlea.html', {'form': form , created_nums:created_nums }) def currentavonleas(request): avonleas = AvonleaClass.objects.all() return render(request, 'meter_readings/currentavonleas.html', {'avonleas':avonleas}) def viewavonlea(request, avonleas_pk): avonlea = get_object_or_404(AvonleaClass, pk=avonleas_pk) if request.method == 'GET': form = AvonleaForm(instance=avonlea) return render(request, 'meter_readings/viewavonleas.html', {'avonlea': avonlea, 'form':form}) else: try: form = AvonleaForm(request.POST, instance=avonlea) form.save() return redirect('Avonlea') except ValueError: return render(request, 'meter_readings/viewavonleas.html', {'avonlea': avonlea, 'form':form, 'error':'Bad info'}) def deleteavonlea(request, avonleas_pk): avonlea = get_object_or_404(AvonleaClass, pk=avonleas_pk) if request.method == 'POST': avonlea.delete() return redirect('Avonlea') import csv def Avonleacsv(request): data =AvonleaClass.objects.all() response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="saved_file.csv"' writer = csv.writer(response) writer.writerow(['Unit', 'Number of Units' ]) for avonleaclass in data: writer.writerow([ avonleaclass.unitNumber, avonleaclass.newReading, ]) return response 

Models.py

from django.db import models from django.contrib.auth.models import User from django.urls import reverse AvonleaUnits = [tuple([x,x]) for x in range(1,73)] class AvonleaClass(models.Model): unitNumber = models.CharField(max_length=2 , default='1') newReading = models.IntegerField( blank=True, null=True) difference = models.IntegerField(blank=True, null=True) unitNotes = models.TextField(blank=True) unitDateEntered = models.DateTimeField(auto_now_add=True, null=True) unitProblem = models.BooleanField(default=False) image = models.ImageField(blank=True, null=True) def __str__(self): return ('Unit ' + self.unitNumber) Forms.py from django.forms import ModelForm from .models import AvonleaClass from django import forms AvnUnits = [tuple([x,x]) for x in range(1,73)] class AvonleaForm(ModelForm): unitNumber = forms.ChoiceField(choices= AvnUnits) class Meta: model = AvonleaClass fields = ['unitNumber','newReading','difference', 'unitNotes','unitProblem' , 'image'] widgets = { 'unitNotes': forms.TextInput(attrs={'size': 10}), 'unitReading': forms.IntegerField(), 'diffrence': forms.IntegerField(), } 

Admin.py

from django.contrib import admin from .models import AvonleaClass class AvonleaAdmin(admin.ModelAdmin): readonly_fields = ('unitDateEntered',) admin.site.register(AvonleaClass, AvonleaAdmin) class Birchleigh_ViewAdmin(admin.ModelAdmin): readonly_fields = ('unitDateEntered',) 

Avonlea.html

<!-- CSS only --> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"> {% extends 'meter_readings/base.html' %} {% block content %} <!-- CSS only --> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"> <div class="container"> <h1>{{name}} Meter Readings</h1> {% for unit_number in form.unitNumber %} <h6>{{ error }}</h6> <form class="form-group mt-4" method="post" {% if unit_number.data.value in created_nums %} style="background-color: rgb(231, 224, 224); " {% endif %} > {% csrf_token %} <div class="container"> <div class="row mb-3"> <div class="col"> {{ unit_number.data.value}} </div> <input type="hidden" name="unitNumber" value="{{unit_number.data.value}}"> <div class="col" id="prev{{unit_number.data.value}}" > {{ previousReading }} </div> <div class="col" id="readings{{unit_number.data.value}}"> {{ form.newReading }} </div> <div class="col" id="difference{{unit_number.data.value}}"> {{ form.difference }} </div> <div class="col"> {{ form.unitNotes }} </div> <div class="col"> {{ form.unitProblem }} </div> <div class="col" id="img{{unit_number.data.value}}"> {{ form.image }} </div> <div class="col"> <button class="btn btn-success " type="submit" {% if unit_number.data.value in created_nums %} disabled {% endif %} > Save</button> </div> </div> </div> <script> document.getElementById("img{{unit_number.data.value}}").firstElementChild.disabled = true document.getElementById("difference{{unit_number.data.value}}").firstElementChild.disabled = true var last = document.getElementById('readings{{unit_number.data.value}}'); last.addEventListener('input' , (e)=>{ last = e.target.value var first = document.getElementById('prev{{unit_number.data.value}}').firstElementChild.value; var diff= document.getElementById('difference{{unit_number.data.value}}').firstElementChild.value= parseInt(last) - parseInt(first); if (diff <= 0){ console.log(diff) console.log("-ve") document.getElementById("difference{{unit_number.data.value}}").firstElementChild.style.border="2px solid red"; document.getElementById("img{{unit_number.data.value}}").firstElementChild.disabled=false } else{ document.getElementById("difference{{unit_number.data.value}}").firstElementChild.style.border="2px solid "; document.getElementById("img{{unit_number.data.value}}").firstElementChild.disabled=true console.log("+ve") } }) </script> </form> {% endfor %} <style> .error { border:2px solid red; } </style> <form method="POST", action="{% url 'currentAvonleas' %}"> {% csrf_token %} <button type="submit">View all Avonlea readings</button> </form> <form method="POST", action="{% url 'Avonleacsv' %}"> {% csrf_token %} <button type="submit">Export readings to Excel</button> </form> {% endblock %} <br> <br> <br> 

home.html:

<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous"> {% extends 'meter_readings/base.html' %} {% block content %} {% csrf_token %} <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous"> <div class="container"> <div class="jumbotron"> <h1 class="display-5 text-center" align-items-center>Meter Reading Application</h1> <h3>Individual Unit Readings</h3> </div> <div class="container"> <a href="{% url 'Avonlea' %}" class="btn btn-info" >Avonlea </a> <br> <br> </div> </div> {% endblock %} 

The exact error that is given :

TypeError at /avn init() takes 1 positional argument but 2 were given Request Method: GET Request URL: http://localhost:8000/avn Django Version: 3.2 Exception Type: TypeError Exception Value:
init() takes 1 positional argument but 2 were given Exception Location: C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py, line 181, in _get_response Python Executable: C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\python.exe Python Version: 3.9.4 Python Path:
['C:\Users\KylePOG\Desktop\meter-reading', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\python39.zip', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\DLLs', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\lib', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\lib\site-packages'] Server time: Sun, 30 May 2021 19:14:46 +0000 Traceback Switch to copy-and-paste view C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py, line 47, in inner response = get_response(request) … ▶ Local vars C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py, line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) … ▶ Local vars

1 Answer 1

3

You need to work with .as_view(…) method [Django-doc] to turn a class-based view into a function that can handle the request, so:

path('avn', views.AvonleaView.as_view(), name='Avonlea'),
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.