Python Django Listview显示0个结果
我有一个奇怪的情况(翻译:我缺少一些明显的东西),我有一个ListView,当我迭代queryset中的每个对象并产生结果时,该ListView呈现良好,但当我只返回queryset时,返回0个结果Python Django Listview显示0个结果,python,django,listview,templates,Python,Django,Listview,Templates,我有一个奇怪的情况(翻译:我缺少一些明显的东西),我有一个ListView,当我迭代queryset中的每个对象并产生结果时,该ListView呈现良好,但当我只返回queryset时,返回0个结果 class TestListView(ListView): model = Result context_object_name = 'results' template_name = 'cases/test_list2.html' def get_queryset(
class TestListView(ListView):
model = Result
context_object_name = 'results'
template_name = 'cases/test_list2.html'
def get_queryset(self):
# Get latest results
results = Result.objects.filter(canonical=True, environment__config__in=['staging', 'production']).order_by('test__id', '-created_at').distinct('test__id').select_related('test', 'environment')
# Return Queryset
return results # type <class 'django.db.models.query.QuerySet'>, returns 0 elements from view
for result in results:
yield result # returns correct number of results, assuming above 'Return Queryset' line is commented out
类TestListView(ListView):
模型=结果
上下文\对象\名称='results'
模板名称='cases/test\u list2.html'
def get_queryset(自我):
#获取最新结果
results=Result.objects.filter(canonical=True,environment\uu config\uu in=['staging','production'])。order\u by('test\uu id','-created\u at')。distinct('test\uu id')。选择与测试相关的('test','environment'))
#返回查询集
返回结果#类型,从视图中返回0个元素
对于结果中的结果:
yield result#返回正确数量的结果,假设上面的“Return Queryset”行被注释掉
我做错了什么?在返回后删除for循环解决了我的问题:
class TestListView(ListView):
model = Result
context_object_name = 'results'
template_name = 'cases/test_list2.html'
def get_queryset(self):
# Get latest results
results = Result.objects.filter(canonical=True, environment__config__in=['staging', 'production']).order_by('test__id', '-created_at').distinct('test__id').select_related('test', 'environment')
# Return Queryset
return results # type <class 'django.db.models.query.QuerySet'>, returns 0 elements from view
类TestListView(ListView):
模型=结果
上下文\对象\名称='results'
模板名称='cases/test\u list2.html'
def get_queryset(自我):
#获取最新结果
results=Result.objects.filter(canonical=True,environment\uu config\uu in=['staging','production'])。order\u by('test\uu id','-created\u at')。distinct('test\uu id')。选择与测试相关的('test','environment'))
#返回查询集
返回结果#类型,从视图中返回0个元素
感谢@Hymns For Disco和@Selcuk这毫无意义。这真的是你的全部代码吗?你一定在某处使用了queryset。你的评论帮了我的忙——在返回解决了问题后,从中删除for循环。但是现在我的问题是为什么?在python中
return
之后,函数中不会有更多的行execute@HymnsForDisco不是这样。Python仍然将函数视为生成器,在本例中,return
语句实际上不会返回任何内容,只是简单地停止迭代。请看,在任何情况下,我所说的都是正确的,返回后的语句将不会执行,无论是生成器还是函数。我想OP可能不熟悉这一点,因为在返回后放置代码应该是一个明显的危险信号