如何将json文件导入Django模型?

ep6jt1vc  于 2023-01-10  发布在  Go
关注(0)|答案(4)|浏览(178)

我有一个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之间的关系。
或者有更简单的方法?
谢谢。

ma8fv8wu

ma8fv8wu1#

使用manage.py导入装置:

python manage.py loaddata fixture.json
g52tjvyc

g52tjvyc2#

我没有看到你的json有一个非常清晰的结构,在某种意义上,它没有明确定义哪个字段应该进入哪个模型,以及所有的东西是如何关联的,所以我建议只创建一个导入脚本,在这个脚本中,它手动地遍历所有的json并创建适当的模型示例。
在我看来,一个结构良好的json的好例子是Django序列化的输出,你可以看看here

ztyzrc3y

ztyzrc3y3#

json中要填充到数据库的数据:

  • 您需要将数据字段从JSONMap到数据库。
  • 这样做的最佳和首选(或者更确切地说是设计的)方式是使用夹具。
  • 对于MapDjango,序列化是GO的方法。
woobm2wo

woobm2wo4#

Django已经有了很大的发展,在Django2.x下,可能最好的方法是使用Django内置的serializers(如@miki725所提到的)和数据迁移,这将允许在运行迁移时加载数据(包括在运行单元测试之前运行迁移)。

相关问题