【问题标题】:Django Model Design for Nested Json Output嵌套 Json 输出的 Django 模型设计
【发布时间】:2020-05-20 09:18:27
【问题描述】:

我想设计模型以获得如下的 json 输出。我一直在尝试不同的替代方法,使用外键或多对多字段,但无法正常工作。

这就是我想要的。每个用户可能有不同的培训,并且针对主题用户的每次培训可能有多个日期。

{ “用户名”:“12345”, “用户名”:“约翰”, “培训”:{ “trn1”:[ “20-01-2018” ], “trn2”:[ "20-01-2018", “2019 年 1 月 20 日” ], “trn3”:[ "20-01-2018", "20-01-2019", “15-04-2019” ] }, "notes": "关于用户的注释" }

【问题讨论】:

    标签: json django database model nested


    【解决方案1】:

    取决于您使用的数据库。 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)
    

    【讨论】:

    • 感谢您的快速回复,我会试试看!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    相关资源
    最近更新 更多