簡體   English   中英

查詢集上的 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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM