我正在尝试测试 Django 项目的某些部分。测试是:
class SearchTest(TestCase):
def test_object_added(self):
SomeSingleton().add_one_object_to_model()
tmp = SomeModel.objects.latest('id')
self.assertEqual(tmp.some_field,SOME_VALUE)
在这里,我正在调用一些函数以某种方式将对象添加到模型中。创建模型与一些 Celery 任务执行有关。测试的目的是检查添加模型的字段值。因此,当一个对象被添加到模型中时,它会成为最新的id
.
我跑的时候得到了这个./manage.py test some_app
:
DoesNotExist:CeleryTask 匹配查询不存在。
我在这里找到了这个问题并尝试做同样的事情。我更改'id'
了tmp = SomeModel.objects.latest('id')
所有可能的变体:u'id'
,u'"id"'
甚至u"id"
和u"'id'"
。对于单引号类型的变体,我仍然遇到同样的问题。但我得到了
FieldError:无效的 order_by 参数:[u'-“id”']
到具有两种引号类型的变体。没关系,我们还有其他方法可以获取模型的最新对象吗?我还没有找到一个有效的。我试图声明get_latest_by = "id"
,class Meta
但我遇到了关于不存在的查询的相同问题。
我尝试了一些 Python 方法(我仍然使用某种列表,对吗?)tmp = SomeModel.objects.all()[-1]
,SomeModel.objects.all()[len(SomeModel.objects.all())-1]
问题是
AssertionError:不支持负索引。
然后我尝试SomeModel.objects.all().reverse()[0]
但立即得到答复:
IndexError:列表索引超出范围
坦率地说,我很困惑。所有这些方法在输入时都很好,./manage.py shell
所以我可以获得最新的模型,但由于某种原因,在使用./manage.py test some_app
. 应对它的正确方法是什么?