如何在Django中过滤queryset到当前用户



我有一个网站,可以获取当前用户下列出的所有记录。

现在,它抓取并过滤到所有可用记录,然后过滤到当前用户。有没有一种方法可以让它不必进行初始过滤?

class PromiseView(SingleTableView):
queryset = Promise.objects.filter(deleted__isnull=True)
table_class = PromiseTable
template_name = 'promise.html'
def get_queryset(self):

return self.queryset.filter(
windows_user=self.request.user, # There has to be a better way for this one.
)

我想使其初始查询集等于

queryset = Promise.objects.filter(windows_user=self.request.user,deleted__isnull=True)

并去掉get_queryset函数。先查询整个数据库,然后再次查询以过滤到我想要的内容,这是没有意义的

这是型号

class Promise(models.Model):
windows_user = models.CharField('Windows', max_length=20)
event_date = models.DateTimeField('Date')
notes = models.CharField('note', max_length=100)
deleted = models.DateTimeField('Deleted', null=True)
class Meta:
db_table = 'form_promise'
indexes = [
models.Index(fields=['windows_user','deleted', ], name='index01'),
]

您不需要包含第一个queryset = ...,只需使用get_queryset()即可填充数据。如果你想显式,那么你可以用qs.none()初始化一个空的查询集,它不会命中数据库,然后从get_queryset()返回实际数据。

class PromiseView(SingleTableView):
queryset = Promise.objects.none()  # optional
table_class = PromiseTable
template_name = 'promise.html'
def get_queryset(self):
return Promise.objects.filter(
deleted__isnull=True,
windows_user=self.request.user.username,  # I think you need user.username here.
)

最新更新