在Django中执行查询以对多个表的数据进行排序

时间:2019-02-21 06:19:20

标签: python django django-models django-rest-framework django-orm

我正在使用Python(3),Django(1.11)和DRF(3.6)开发一个项目,其中我必须执行查询以从多个模型中获取数据并添加多个订单。

这就是我所拥有的:

我的models.py

class Sub1(models.Model):
    id = models.CharField(primary_key=True, max_length=255)
    login = models.CharField(max_length=255)
    avatar_url = models.URLField(max_length=500)


class Sub2(models.Model):
    id = models.CharField(primary_key=True, max_length=255)
    name = models.CharField(max_length=255)
    url = models.URLField(max_length=500)


class Event(models.Model):
    id = models.CharField(primary_key=True, max_length=255)
    type = models.CharField(max_length=255)
    sub1 = models.ForeignKey(Sub1, on_delete=models.CASCADE, related_name='events')
    sub2 = models.ForeignKey(Sub2, on_delete=models.CASCADE)
    created_at = models.DateTimeField()

我的views.py:

class Sub1View(generics.GenericAPIView):
    queryset = Event.objects.all().order_by('sub1')
    serializer_class = EventModelSerializer

    def get(self, request):
        queryset = Event.objects.all().values('sub1').annotate(total=Count('sub1')).order_by('created_at')
        print(queryset)
        return Response(queryset, content_type='application/json', status=200)

我的urls.py:

url(r'^sub1/$', views.Sub1View.as_view(), name='sub1'),
url(r'^sub1/streak/$', views.sub1_streak, name='actor-streak')

这是我要实现的目标:

  1. 我想返回所有 Sub1 的JSON数组,这些数组按 与每个 sub1 关联的事件总数降序 通过/sub1处的GET请求进行排序。如果不止一个 Sub1 具有相同数量的事件,然后按最新事件的时间戳降序对它们进行排序。如果超过 一个 Sub1 具有与最新事件相同的时间戳,然后 按登录的字母顺序对其进行排序。
  2. 返回Sub1排序的maximum streak条记录: 服务应该能够返回所有 Sub1 的JSON数组 按最大条纹数排序(即连续的总数 Sub1 天已按降序将事件推送到系统) /sub1/streak处的GET请求。如果不止一个 Sub1 具有相同的最大条纹,然后按 最新事件的时间戳以降序排列。如果超过 一个 Sub1 具有与最新事件相同的时间戳,然后订购 按登录的字母顺序排列。

0 个答案:

没有答案