我有一个网站,可以获取当前用户下列出的所有记录。
现在,它抓取并过滤到所有可用记录,然后过滤到当前用户。有没有一种方法可以让它不必进行初始过滤?
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.
)