Выполнять запросы для заказа данных для нескольких таблиц с сортировкой в ​​Django - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю над проектом с использованием 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)

My urls.py:

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

И вот чего я хочу достичь:

  1. Я хочу вернуть массив JSONвсе Sub1 отсортированы по общему количеству связанных событий с каждым sub1 в порядке убывания по запросу GET в /sub1.Если существует более одного Sub1 с одинаковым количеством событий, упорядочите их по отметке времени последнего события в порядке убывания.Если более одного Sub1 имеют одинаковую метку времени для последнего события, упорядочите их в алфавитном порядке входа в систему.
  2. Возвращение записей Sub1, упорядоченных по maximum streak: Служба должна иметь возможность возвращать массив JSON из всех Sub1 , отсортированных по максимальной полосе (т. Е. Общее количество последовательных дней Sub1 подтолкнуло событиев систему) в порядке убывания по запросу GET на /sub1/streak.Если имеется более одного Sub1 с одной и той же максимальной полосой, упорядочите их по отметке времени последнего события в порядке убывания.Если более одного Sub1 имеют одинаковую метку времени для последнего события, упорядочите их в алфавитном порядке входа в систему.
...