В зависимости от базы данных, которую вы используете. Postgres может использовать ArrayField
для хранения списка дат. Если вы используете любую другую БД, вам понадобится дополнительная модель для дат или сохранить их как список JSON в TextField. Вот оба варианта:
С Postgres:
class User(models.Model):
userid = models.CharField()
username = models.CharField()
class Training(models.Model):
trainingid = models.CharField()
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='trainings',
)
dates = ArrayField(
models.DateField()
)
С другими БД:
class User(models.Model):
userid = models.CharField()
username = models.CharField()
class Training(models.Model):
trainingid = models.CharField()
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='trainings',
)
class Date(models.Model):
date = models.DateField()
training = models.ForeignKey(
Training,
on_delete=models.CASCADE,
related_name='dates',
)
Вот как воссоздать ваш json объект для любого Опция БД:
users = []
for user in User.objects.all():
current_user = {
'userid': user.userid,
'username': user.username,
'trainings': {}
}
for training in user.trainings:
current_user['trainings'][training.trainingid] = []
for date in training.dates:
current_user['trainings'][training.trainingid].append(date.date)
users.append(current_user)
json_users = json.dumps(users)