取决于您使用的数据库。 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',
)
以下是如何为任何 DB 选项重新创建 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)