Python 对已评估查询集(Django)进行排序的方法
我有以下功能和测试:Python 对已评估查询集(Django)进行排序的方法,python,django,Python,Django,我有以下功能和测试: def create_question(days, question_text="Empty"): time = timezone.now() + datetime.timedelta(days=days) return Question.objects.create(question_text = question_text, pub_date=time) def test_two_past_questions(self): """ T
def create_question(days, question_text="Empty"):
time = timezone.now() + datetime.timedelta(days=days)
return Question.objects.create(question_text = question_text, pub_date=time)
def test_two_past_questions(self):
"""
The questions index page may display multiple questions.
"""
create_question(question_text="Past question 1.", days=-30)
create_question(question_text="Past question 2.", days=-5)
response = self.client.get(reverse('polls:index'))
self.assertQuerysetEqual(
response.context['latest_question_list'].order_by('-pub_date'),
['<Question: Past question 1.>', '<Question: Past question 2.>'],
)
据我所知,它生成了一个错误,因为Queryset
已被计算,而order\u by
仅用于在数据库中重新排序
如果没有失败的排序attepmpt,我的测试将失败,因为对象的顺序错误:
FAIL: test_two_past_questions (polls.tests.QuestionIndexViewTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/sahandzarrinkoub/.local/share/virtualenvs/django/mysite/polls/tests.py", line 77, in test_two_past_questions
['<Question: Past question 1.>', '<Question: Past question 2.>'],
File "/Users/sahandzarrinkoub/.local/share/virtualenvs/django/lib/python3.6/site-packages/django/test/testcases.py", line 972, in assertQuerysetEqual
return self.assertEqual(list(items), values, msg=msg)
AssertionError: Lists differ: ['<Question: Past question 2.>', '<Question: Past question 1.>'] != ['<Question: Past question 1.>', '<Question: Past question 2.>']
First differing element 0:
'<Question: Past question 2.>'
'<Question: Past question 1.>'
- ['<Question: Past question 2.>', '<Question: Past question 1.>']
? ^ ^
+ ['<Question: Past question 1.>', '<Question: Past question 2.>']
? ^ ^
失败:测试两个过去的问题(轮询、测试、问题索引测试)
----------------------------------------------------------------------
回溯(最近一次呼叫最后一次):
文件“/Users/sahandzarrinkoub/.local/share/virtualenvs/django/mysite/polls/tests.py”,第77行,在过去两个问题的测试中
['', ''],
文件“/Users/sahandzarrinkoub/.local/share/virtualenvs/django/lib/python3.6/site packages/django/test/testcases.py”,第972行,在AssertQuerystequal中
返回self.assertEqual(列表(项),值,msg=msg)
断言错误:列表不同:['',]!=['', '']
第一个不同的元素0:
''
''
- ['', '']
? ^ ^
+ ['', '']
? ^ ^
我想通过按发布日期对它们进行排序来确保它们的顺序正确。有没有一种像对普通列表排序一样对Queryset对象进行排序的方法
FAIL: test_two_past_questions (polls.tests.QuestionIndexViewTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/sahandzarrinkoub/.local/share/virtualenvs/django/mysite/polls/tests.py", line 77, in test_two_past_questions
['<Question: Past question 1.>', '<Question: Past question 2.>'],
File "/Users/sahandzarrinkoub/.local/share/virtualenvs/django/lib/python3.6/site-packages/django/test/testcases.py", line 972, in assertQuerysetEqual
return self.assertEqual(list(items), values, msg=msg)
AssertionError: Lists differ: ['<Question: Past question 2.>', '<Question: Past question 1.>'] != ['<Question: Past question 1.>', '<Question: Past question 2.>']
First differing element 0:
'<Question: Past question 2.>'
'<Question: Past question 1.>'
- ['<Question: Past question 2.>', '<Question: Past question 1.>']
? ^ ^
+ ['<Question: Past question 1.>', '<Question: Past question 2.>']
? ^ ^