Не работает фильтрация Django по набору запросов
Я пытаюсь добавить фильтр в существующий набор запросов на основе условия, но это не работает.
Это работает
queryset = None
if self.is_instructor == True:
queryset = Issue.objects.filter(type=self.type, type_id=self.type_id).filter(status__in=self.status)
else:
queryset = Issue.objects.filter(type=self.type, type_id=self.type_id, created_by=self.created_by)
Это не
queryset = None
if self.is_instructor == True:
queryset = Issue.objects.filter(type=self.type, type_id=self.type_id)
else:
queryset = Issue.objects.filter(type=self.type, type_id=self.type_id, created_by=self.created_by)
if len(self.status) > 0:
queryset.filter(
Q(status__in=self.status)
)
queryset.order_by('-created_on')
Вот как выглядит моя модель
STATUS_CHOICES = (
('UNC', 'Unconfirmed'),
('CNF', 'Confirmed'),
('INP', 'In Progress'),
('UAC', 'User Action Pending'),
('RES', 'Resolved'),
)
class Issue(models.Model):
UNCONFIRMED = 'UNC'
title = models.CharField(max_length=512, blank=False)
description = models.TextField(blank=False)
created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='creator')
created_on = models.DateTimeField(auto_now_add=True)
status = models.CharField(
max_length=3,
choices=STATUS_CHOICES,
default=UNCONFIRMED
)
Убедился, что self.status содержит необходимые данные. Я не могу использовать get(), потому что есть несколько записей
Я видел некоторые другие ответы, но не смог продвинуться. Заранее спасибо.
Базан
Вам нужно обновить query_set
, а не просто вызвать функцию.
...
if len(self.status) > 0:
queryset = queryset.filter(status__in=self.status)
queryset = queryset.order_by('-created_on')
Надеюсь, это может помочь.