【问题标题】:Django Deserialization Error Problem installing FixtureDjango反序列化错误安装Fixture的问题
【发布时间】:2019-02-10 14:27:24
【问题描述】:
Traceback (most recent call last):
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/serializers/json.py", line 69, in Deserializer
    yield from PythonDeserializer(objects, **options)
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/serializers/python.py", line 91, in Deserializer
    Model = _get_model(d["model"])
KeyError: 'model'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute
    output = self.handle(*args, **options)
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/management/commands/loaddata.py", line 72, in handle
    self.loaddata(fixture_labels)
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/management/commands/loaddata.py", line 113, in loaddata
    self.load_label(fixture_label)
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/management/commands/loaddata.py", line 168, in load_label
    for obj in objects:
  File "/Users/sparshkedia/Desktop/task/venv/lib/python3.6/site-packages/django/core/serializers/json.py", line 73, in Deserializer
    raise DeserializationError() from exc
django.core.serializers.base.DeserializationError: Problem installing fixture '/Users/sparshkedia/Desktop/task/movie_rs/movies.json'

这是当我尝试将我的 json 文件反序列化到数据库中时显示的上述错误。

我的 json 文件如下所示:

[
  {
    "description": "A cowboy doll is profoundly threatened and jealous when a new spaceman figure supplants him as top toy in a boy's room.",
    "genre": "Animation,Adventure,Comedy,Family,Fantasy",
    "imdb_url": "https://www.imdb.com/title/tt0114709/",
    "img_url": "https://m.media-amazon.com/images/M/MV5BMDU2ZWJlMjktMTRhMy00ZTA5LWEzNDgtYmNmZTEwZTViZWJkXkEyXkFqcGdeQXVyNDQ2OTk4MzI@._V1_UX182_CR0,0,182,268_AL__QL50.jpg",
    "movie_id": 114709,
    "title": "Toy Story",
    "users_rating": 8.3,
    "year": 1995
  },
  {
    "description": "George Banks must deal not only with the pregnancy of his daughter, but also with the unexpected pregnancy of his wife.",
    "genre": "Comedy,Family,Romance",
    "imdb_url": "https://www.imdb.com/title/tt0113041/",
    "img_url": "https://m.media-amazon.com/images/M/MV5BOTEyNzg5NjYtNDU4OS00MWYxLWJhMTItYWU4NTkyNDBmM2Y0XkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_UX182_CR0,0,182,268_AL__QL50.jpg",
    "movie_id": 113041,
    "title": "Father of the Bride Part II",
    "users_rating": 6,
    "year": 1995
  }]

我需要做什么才能将 json 文件输入数据库? 我还根据 json 文件创建了包含所有字段的适当电影模型。

我为此使用 python manage.py loaddata movies.json。有没有其他方法,如果有请帮帮我?

【问题讨论】:

    标签: python json django deserialization json-deserialization


    【解决方案1】:

    Fixtures 文件必须匹配 django serialization format,例如:

    [
        {
            "pk": "4b678b301dfd8a4e0dad910de3ae245b",
            "model": "sessions.session",
            "fields": {
                "expire_date": "2013-01-16T08:16:59.844Z",
                ...
            }
        }
    ]
    

    所以你需要通过以下方式重写你的fixture:

    1. 添加model
    2. 添加pk字段
    3. 将其余字段移至fields 内部对象

    【讨论】:

    • 有什么方法可以将我的 json 文件转换为序列化格式?
    • 要么手动添加必填字段,要么编写程序进行转换
    • 当我调用dumpdata时,它没有“pk”键。我无法加载 json 文件中生成的数据。我阅读了这个解决方案,这次通过不使用 --natural-primary 标记再次使用“pk”调用了 dumpdata。我可以生成json文件并且能够成功加载它。
    【解决方案2】:

    我在 manage.py 中有打印语句。 该输出被保存在生成​​格式错误的夹具 json 文件中。 删除那些打印语句解决了它。 以下是我的旧(错误格式)固定装置 .json 文件。我删除了第一行,它起作用了。

    app.yaml file = dev_app.yaml
    [
      {
        "model": "plans.planslevel1",
        "pk": 1,
        "fields": {
          "name": "abc",
          "description": "xyz"
        }
      
      }]
    

    【讨论】:

      【解决方案3】:

      有时对象没有正确关闭

      • 打开 JSON 文件,查看 pycharmIDE 突出显示的错误。
      • 如果任何对象未关闭,请手动修复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        • 2016-05-04
        • 2012-03-25
        • 1970-01-01
        • 2012-09-16
        • 2013-12-25
        相关资源
        最近更新 更多