【问题标题】:Import json file to Django model将 json 文件导入 Django 模型
【发布时间】:2012-03-27 10:46:32
【问题描述】:

我有一个json格式的文件,结构如下:

{
    "Admiralty Islands": [
        [
            "Up to 1 kg",
            "5.00"
        ], 
        [
            "1 - 10 kg", 
            "10.00"
        ], 
    ], 
    "Afghanistan": [
        [
            "Up to 1 kg",
            "15.00"
        ], 
        [
            "1 - 10 kg", 
            "20.00"
        ], 
    ], 
...
}

还有三个模型:

class Country(models.Model):
    name = models.CharField(max_length=128, unique=True)

class Weight(models.Model):
    name = models.CharField(max_length=128, unique=True)
    min_weight = models.IntegerField()
    max_weight = models.IntegerField()

class Shipping(models.Model):
    country = models.ForeignKey(Country)
    weight = models.ForeignKey(Weight)
    price = models.DecimalField(max_digits=7, decimal_places=2)

使用json文件导入数据库最正确的方法是什么?

我应该把json文件转换成fixture文件吗?但是如何处理表之间的关系呢? 或者写view这样更好:

f = open('file.json', 'r')
obj = simplejson.load(f)

for o in obj:
    record = Country(name = o)
    record.save()

但也想不通models之间如何建立关系。

或者有没有更简单的方法?

谢谢。

【问题讨论】:

    标签: python django json


    【解决方案1】:

    使用manage.py 导入fixture:

    python manage.py loaddata fixture.json
    

    【讨论】:

      【解决方案2】:

      我没有在您的 json 中看到一个非常清晰的结构,因为它没有在任何地方明确定义哪个字段应该进入哪个模型以及所有内容如何相关。所以我建议只制作一个导入脚本,在其中手动遍历所有 json 并创建正确的模型实例。

      在我看来,结构良好的 json 的一个很好的例子是 Django 序列化的输出。你可以看看here

      【讨论】:

        【解决方案3】:

        json 中的数据将被填充到数据库中:

        • 您需要将数据字段从json映射到数据库。

        • 最好的、首选的或者更确切地说是设计好的方法是使用固定装置。

        • 对于映射 Django 序列化方法是到GO

        【讨论】:

          【解决方案4】:

          自从提出这个问题以来,Django 已经发展了很多。在 Django 2.x 下,引入依赖项最少的最好方法可能是使用 Django 内置的serializers(如@miki725 所述)和data migrations。这将允许您在运行迁移时加载数据(包括在运行单元测试之前运行迁移时)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-01-01
            • 2017-02-19
            • 1970-01-01
            • 2020-12-14
            • 2014-04-14
            • 1970-01-01
            • 2017-09-14
            • 2017-03-09
            相关资源
            最近更新 更多