查询集上的 Django 过滤不起作用
Django filtering on a queryset not working
我正在尝试根据条件在现有查询集上添加过滤器,但它不起作用。
这个有效
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')
希望对您有所帮助。
我正在尝试根据条件在现有查询集上添加过滤器,但它不起作用。
这个有效
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')
希望对您有所帮助。