Я работаю над проектом с использованием 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')
И вот чего я хочу достичь:
- Я хочу вернуть массив JSONвсе Sub1 отсортированы по общему количеству связанных событий с каждым sub1 в порядке убывания по запросу GET в
/sub1
.Если существует более одного Sub1 с одинаковым количеством событий, упорядочите их по отметке времени последнего события в порядке убывания.Если более одного Sub1 имеют одинаковую метку времени для последнего события, упорядочите их в алфавитном порядке входа в систему. - Возвращение записей
Sub1
, упорядоченных по maximum streak
: Служба должна иметь возможность возвращать массив JSON из всех Sub1 , отсортированных по максимальной полосе (т. Е. Общее количество последовательных дней Sub1 подтолкнуло событиев систему) в порядке убывания по запросу GET на /sub1/streak
.Если имеется более одного Sub1 с одной и той же максимальной полосой, упорядочите их по отметке времени последнего события в порядке убывания.Если более одного Sub1 имеют одинаковую метку времени для последнего события, упорядочите их в алфавитном порядке входа в систему.