Способ фильтрации по полю БД в Django с помощью представлений классов
Я пытался искать ответы, но через несколько дней я здесь и спрашиваю:
Я новичок, делаю приложение для списка дел - расширяю учебник, которому следовал. В настоящее время оно фильтрует по пользователю, что хорошо, но я также хочу фильтровать по полю в БД (список).
Модели:
class ToDoList(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
title = models.CharField(max_length=200)
description = models.CharField(max_length=200)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
class Meta:
ordering = ['created']
class Task(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
title = models.CharField(max_length=200)
description = models.TextField(null=True, blank=True)
complete = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
list = models.ForeignKey(ToDoList, on_delete=models.CASCADE)
def __str__(self):
return self.title
class Meta:
ordering = ['complete']
Вид, который я пытаюсь изменить:
class TaskList(LoginRequiredMixin, ListView):
model = Task
context_object_name = "tasks"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['tasks'] = context['tasks'].filter(user=self.request.user)
context['count'] = context['tasks'].filter(complete=False).count
search_input = self.request.GET.get('search-area') or ''
if search_input:
context['tasks'] = context['tasks'].filter(title__startswith=search_input)
context['search_input'] = search_input
return context
Кроме того, есть ли способ получить доступ к переменной list в html-компоненте, как здесь?
url:
path('tasks/<list>/create', TaskCreate.as_view(), name="task-create"),
html:
<a href="{% url 'tasks' 'task.list' %}">← Back</a>