Coverage for tasks/views.py: 71.62%

74 statements  

« prev     ^ index     » next       coverage.py v7.9.0, created at 2025-06-12 14:44 -0700

1from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin 

2from django.urls import reverse, reverse_lazy 

3from django.views.generic import ( 

4 CreateView, 

5 DeleteView, 

6 ListView, 

7 UpdateView, 

8) 

9 

10from .models import ToDoItem, ToDoList 

11 

12 

13class ListListView(LoginRequiredMixin, ListView): 

14 model = ToDoList 

15 template_name = "index.html" 

16 

17 def get_queryset(self): 

18 return ToDoList.objects.filter(owner=self.request.user) 1d

19 

20 paginate_by = 5 

21 

22 

23class ItemListView(LoginRequiredMixin, ListView): 

24 model = ToDoItem 

25 template_name = "lists/todo_list.html" 

26 

27 def get_queryset(self): 

28 return ToDoItem.objects.filter(todo_list_id=self.kwargs["list_id"]) 1b

29 

30 def get_context_data(self): 

31 context = super().get_context_data() 1b

32 context["todo_list"] = ToDoList.objects.get(id=self.kwargs["list_id"]) 1b

33 return context 1b

34 

35 paginate_by = 5 

36 

37 

38class ListCreateView(LoginRequiredMixin, CreateView): 

39 model = ToDoList 

40 fields = ["title"] 

41 template_name = "lists/todolist_new.html" 

42 

43 """ 

44 def form_valid(self, form): 

45 form.instance.owner = self.request.user 

46 return super().form_valid(form) 

47 """ 

48 

49 def get_context_data(self): 

50 context = super(ListCreateView, self).get_context_data() 

51 context["title"] = "Add a new list" 

52 return context 

53 

54 

55class ItemCreateView(LoginRequiredMixin, CreateView): 

56 model = ToDoItem 

57 fields = [ 

58 "todo_list", 

59 "title", 

60 "description", 

61 "due_date", 

62 ] 

63 template_name = "lists/todoitem_new.html" 

64 

65 def get_initial(self): 

66 initial_data = super(ItemCreateView, self).get_initial() 

67 todo_list = ToDoList.objects.get(id=self.kwargs["list_id"]) 

68 initial_data["todo_list"] = todo_list 

69 return initial_data 

70 

71 def get_context_data(self): 

72 context = super(ItemCreateView, self).get_context_data() 

73 todo_list = ToDoList.objects.get(id=self.kwargs["list_id"]) 

74 context["todo_list"] = todo_list 

75 context["title"] = "Create a new item" 

76 return context 

77 

78 def get_success_url(self): 

79 return reverse("list", args=[self.object.todo_list_id]) 

80 

81 

82class ItemUpdateView(LoginRequiredMixin, UpdateView): 

83 model = ToDoItem 

84 fields = [ 

85 "todo_list", 

86 "title", 

87 "description", 

88 "due_date", 

89 ] 

90 template_name = "lists/todoitem_new.html" 

91 

92 def get_context_data(self): 

93 context = super(ItemUpdateView, self).get_context_data() 

94 context["todo_list"] = self.object.todo_list 

95 context["title"] = "Edit item" 

96 return context 

97 

98 def get_success_url(self): 

99 return reverse("list", args=[self.object.todo_list_id]) 

100 

101 

102class ListDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): 

103 model = ToDoList 

104 template_name = "lists/todolist_confirm_delete.html" 

105 success_url = reverse_lazy("home") 

106 

107 def test_func(self): 

108 obj = self.get_object() 1c

109 return obj.owner == self.request.user 1c

110 

111 

112# class ItemDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): 

113class ItemDeleteView(LoginRequiredMixin, DeleteView): 

114 model = ToDoItem 

115 template_name = "lists/todoitem_confirm_delete.html" 

116 

117 """ 

118 def test_func(self): 

119 obj = self.get_object() 

120 return obj.todo_list.owner == self.request.user 

121 """ 

122 

123 def get_success_url(self): 

124 return reverse_lazy("list", args=[self.kwargs["list_id"]]) 1e

125 

126 def get_context_data(self, **kwargs): 

127 context = super().get_context_data(**kwargs) 

128 context["todo_list"] = self.object.todo_list 

129 return context