I am trying to make a ToDoList for every user. I am using class based views and the auth User model.
For Every User, there is a List model, consisting the List Name, and a Task model which is a child to the List. I am having problem when I am updating a Task under a List. I have my models.py, urls.py, views.py and the templates as follows. models.py: from django.db import models from django.contrib.auth import get_user_model from django.utils.text import slugify from django.urls import reverse User = get_user_model() # Create your models here. class List(models.Model): LIST_TYPES = [('daily','Daily'), ('weekly','Weekly'), ('monthly', 'Monthly'), ('lifelong', 'Life Long')] list_type = models.CharField(max_length = 10, choices = LIST_TYPES) user = models.ForeignKey(User, related_name = 'list', on_delete = models.CASCADE) title = models.CharField(max_length = 32) slug = models.SlugField(allow_unicode = True, unique = True) created_at = models.DateTimeField(auto_now_add = True) def __str__(self): return self.title def save(self, *args, **kwargs): self.slug = slugify(self.title) super().save( *args, **kwargs) class Meta(): ordering = ['title'] class Task(models.Model): list = models.ForeignKey(List, related_name = 'tasks', on_delete = models.CASCADE) user = models.ForeignKey(User, related_name = 'tasks', on_delete = models.CASCADE) name = models.CharField(max_length = 64) task_slug = models.SlugField(allow_unicode = True) completed = models.BooleanField(default = False) created_at = models.DateTimeField(auto_now_add = True) complete_before = models.DateTimeField() class Meta(): ordering = ['complete_before'] def __str__(self): return self.name def save(self,*args, **kwargs): self.task_slug = slugify(self.name) super().save(*args, **kwargs) def get_absolute_url(self): return reverse('listApp:detail', kwargs={'slug':self.slug}) urls.py:- from django.urls import path from . import views app_name = 'listApp' urlpatterns = [ path('', views.ListListView.as_view(), name = 'all'), path('create', views.ListCreateView.as_view(), name = 'create'), path('<slug:slug>', views.ListDetailView.as_view(), name = 'detail'), path('<slug:slug>/createtask', views.TaskCreateView.as_view(), name = 'createtask'), path('<slug:slug>/updatetask/<slug:task_slug>', views.TaskUpdateView.as_view(), name = 'updatetask'), path('update/<slug:slug>', views.ListUpdateView.as_view(), name='update'), path('delete/<slug:slug>', views.ListDeleteView.as_view(), name='delete'), ] views.py:- from django.shortcuts import render from django.views.generic import CreateView, ListView, DetailView, UpdateView, DeleteView from django.contrib.auth.mixins import LoginRequiredMixin from django.urls import reverse_lazy from django.utils.text import slugify from braces.views import SelectRelatedMixin from .forms import ListCreateForm,TaskCreateForm from .models import List,Task # Create your views here. class ListCreateView(LoginRequiredMixin, CreateView): form_class = ListCreateForm success_url = reverse_lazy('listApp:all') template_name = 'listApp/list_form.html' def form_valid(self, form): self.object = form.save(commit = False) self.object.user = self.request.user self.object.save() return super().form_valid(form) class ListListView(LoginRequiredMixin, ListView): model = List template_name = 'listApp/list_list.html' context_object_name = 'lists' def get_queryset(self): self.user = self.request.user return List.objects.filter(user=self.user) class ListDetailView(LoginRequiredMixin, DetailView): model = List template_name = 'listApp/list_detail.html' context_object_name = 'list_detail' class ListUpdateView(LoginRequiredMixin, UpdateView): model = List fields = ('title', 'list_type') template_name_suffix = '_update_form' success_url = reverse_lazy('listApp:all') # # def get_success_url(self): # current_slug = self.kwargs['slug'] # return reverse_lazy('listApp:detail', kwargs={'slug': current_slug}) class ListDeleteView(LoginRequiredMixin, DeleteView): model = List template_name_suffix = '_check_delete' success_url = reverse_lazy('listApp:all') class TaskCreateView(LoginRequiredMixin, CreateView): form_class = TaskCreateForm template_name = 'listApp/task_form.html' def form_valid(self, form): self.object = form.save(commit = False) self.object.user = self.request.user self.object.list = List.objects.get(slug=self.kwargs['slug']) self.object.save() return super().form_valid(form) def get_success_url(self): current_slug = self.kwargs['slug'] return reverse_lazy('listApp:detail', kwargs={'slug': current_slug}) class TaskUpdateView(LoginRequiredMixin, UpdateView): model = Task template_name_suffix = '_update_form' fields = ('name','complete_before') def form_valid(self, form): self.object = form.save(commit = False) self.object.user = self.request.user self.object.list = List.objects.get(slug=self.kwargs['slug']) self.object.save() return super().form_valid(form) def get_success_url(self): current_slug = self.kwargs['slug'] current_task_slug = self.kwargs['task_slug'] return reverse_lazy('listApp:detail', kwargs={'slug': current_slug, 'task_slug': current_task_slug}) Templates:- list_detail.html:- <div class="container my-5 py-3"> <h2>{{list_detail.title}}</h2> <p>Created: {{list_detail.created_at}}</p> <h3 class="d-inline">Tasks:</h3> <a class="btn btn-primary float-right d-inline" href="{% url 'listApp:createtask' slug=list_detail.slug %}">Add Task</a> <div class="container mt-4"> {% for task in list_detail.tasks.all %} <div class="container rounded" style="background-color:#bdc1c7;"> {% if task.completed %} <input type="checkbox" class="d-inline" checked> {% else %} <input type="checkbox" class="d-inline"> {% endif %} <h5 class="d-inline">{{task.name}}</h5> <a href="{% url 'listApp:updatetask' slug=list_detail.slug task_slug=task.task_slug %}" class="btn btn-warning btn-small float-right d-inline">Update Task</a> <p>Due Before:{{task.complete_before}} and Created:{{task.created_at}}</p> </div> {% endfor %} </div> </div> task_update_form.html:- {% extends "base.html" %} {% load bootstrap4 %} {% bootstrap_javascript jquery='full' %} {% block head_content %} <title>{{user.first_name}}|Update Task</title> {% endblock %} {% block body_content %} <div class="container my-5 py-3"> <h2>Update Task </h2> <form method="post"> {% csrf_token %} {% bootstrap_form form %} {{ form.media }} <input type="submit" class="btn btn-warning mt-3" value="Update"> </form> </div> {% endblock %} I have no idea as to why this error is occuring. Please Help. -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/0dd4484f-0bee-46d1-8dec-1d9728b3ead0o%40googlegroups.com.