首页 > 解决方案 > admin.py 中查询集中订单的单元测试

问题描述

我在 django 1.11 的管理中提出了解决方案 - 在 2 个月(60 天)内显示在管理面板即将到来的事件列表的顶部。休息(也即将到来,但例如 3 个月 - 90 天)如下所示。

我想测试我的解决方案,所以我编写了单元测试。但是当我打印对象时,它的顺序是:Event title 1, Event title 2, Event title 3并且应该是:Event title 1, Event title 3, Event title 2

我不知道我在哪里犯错了。

这是 admin.py 中的查询集

def get_queryset(self, request):
    next_two_months = datetime.today() + timedelta(days=60)
    not_three_months = datetime.today() + timedelta(days=90)
    qs = super(EventAdmin, self).get_queryset(request)
    next_two_months_events_list = qs.filter(event_from__gte=next_two_months, event_from__lte=not_three_months)
    rest_events_list = qs.filter(date__lte=datetime.today()).order_by('event_from')
    return next_two_months_events_list | rest_events_list

这是我的测试代码:

def test_queryset_events_list(self):
    self.client.login(**self._get_superuser_data())
    factories.EventFactory.create(title='Event title 1', date=date(2018, 7, 24),
                                  event_from=datetime(2018, 8, 22, 10, 0, 0, 0),
                                  event_to=datetime(2018, 8, 24, 10, 0, 0, 0))
    factories.EventFactory.create(title='Event title 2', date=date(2018, 7, 24),
                                  event_from=datetime(2019, 7, 24, 10, 0, 0, 0),
                                  event_to=datetime(2019, 7, 29, 10, 0, 0, 0))
    factories.EventFactory.create(title='Event title 3', date=date(2018, 7, 24),
                                  event_from=datetime(2019, 2, 22, 10, 0, 0, 0),
                                  event_to=datetime(2019, 2, 24, 10, 0, 0, 0))
    url = reverse('admin:events_event_changelist')
    response = self.client.get(url)
    print(models.Event.objects.all()[0])
    print(models.Event.objects.all()[1])
    print(models.Event.objects.all()[2])
    self.assertEquals(models.Event.objects.count(), 3)

标签: pythondjangofilterdjango-querysetadmin

解决方案


推荐阅读