Как мне добиться этой структуры API с помощью данного сериализатора модели? - PullRequest
0 голосов
/ 02 марта 2020

Модель

class UnitLog(models.Model):
    unit = models.ForeignKey(Unit, on_delete=models.CASCADE)
    user = models.ForeignKey(User, to_field="username",
                             on_delete=models.CASCADE)
    time_in = models.DateTimeField(auto_now_add=True)
    time_out = models.DateTimeField(blank=True, null=True)
    total_time = models.FloatField(default=0.0)  # In seconds
    trainee = models.CharField(max_length=30, blank=True, default="")

Модель Сериализатор

class UnitLogSerializer(serializers.ModelSerializer):
    class Meta:
        model = UnitLog
        fields = ('unit', 'time_in', 'time_out', 'total_time', 'trainee')

Требуемый формат / структура API:

[
  {
    'date': 'Jan 20, 2019',
    'duty: [
         {
          'unit':
          'time_in': 
          'time_out':
          'trainee':
         },
         ...
     ]
  },
  ...
]

По сути, я хочу сгруппировать рабочие журналы сотрудников по разным датам на внешнем уровне и перечислить все журналы в этот день на внутреннем уровне.

Я могу использовать groupby из itertools, упорядочивать набор запросов по time_in__date и создавать список списков журналов, выполненных в разные даты, с a для l oop.

Но я не знаю, как сериализовать список списков. Как мне начать писать сериализатор? Я смутно представляю себе структуру вложенности того же сериализатора, но я не могу понять представление / viewset и набор запросов, который передается. Есть идеи?

...