【问题标题】:Django : ValueError on loading fixtureDjango:加载夹具时出现ValueError
【发布时间】:2014-12-02 11:28:00
【问题描述】:

我正在尝试加载一个看起来像这样的夹具:

some_filename.json

[
{
    "fields": {
        "blockName": "Home & Tech", 
        "catName": "Home", 
        "catUrl": "http://www.buyam.com.ng/catalog/home/35", 
        "prodDesc": "Jojo Pet food is made with added nutrition to meet the demands of a grown up dog that's highly active and needs loads of energy and nutrition. By gaining the required energy with this food, dogs can live life to the optimum. This food can prove to be better as it gives dogs the required blend of fibers that can keep the stomach healthy and the patented X-shaped kibbles that are good to maintain clean and strong teeth till the gum line.", 
        "prodName": "Jo-Jo Dog Food - Tripe Mix 400g", 
        "prodTypeName": "Pet Supplies", 
        "prodTypeUrl": "http://www.buyam.com.ng/catalog/pet-supplies/419", 
        "prodUrl": "http://www.buyam.com.ng/catalog/pet-supplies/419/jo-jo-dog-food-tripe-mix-400g"
    }, 
    "model": "kudisavers.product", 
    "pk": 1
},
{
...
...
}
]

但我收到以下错误:

    Traceback (most recent call last):
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\serializers\json.py", line 74, in Deserializer
    objects = json.loads(stream_or_string)
  File "C:\Python34\lib\json\__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "C:\Python34\lib\json\decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python34\lib\json\decoder.py", line 361, in raw_decode
    raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\management\__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\management\__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\management\base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\management\base.py", line 338, in execute
    output = self.handle(*args, **options)
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\management\commands\loaddata.py", line 61, in handle
    self.loaddata(fixture_labels)
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\management\commands\loaddata.py", line 91, in loaddata
    self.load_label(fixture_label)
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\management\commands\loaddata.py", line 142, in load_label
    for obj in objects:
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\serializers\json.py", line 81, in Deserializer
    six.reraise(DeserializationError, DeserializationError(e), sys.exc_info()[2])
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\utils\six.py", line 549, in reraise
    raise value.with_traceback(tb)
  File "D:\MyWork\Python\Django_Projects\VirtualEnv\lib\site-packages\django\core\serializers\json.py", line 74, in Deserializer
    objects = json.loads(stream_or_string)
  File "C:\Python34\lib\json\__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "C:\Python34\lib\json\decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python34\lib\json\decoder.py", line 361, in raw_decode
    raise ValueError(errmsg("Expecting value", s, err.value)) from None
django.core.serializers.base.DeserializationError: Problem installing fixture 'D:\MyWork\Python\Django_Projects\kudisavers\fixtures\buyam-fixture.json': Expecting value: line 1 column 1 (char 0)

这就是我创建 json 的方式:

file = open('some_filename.json', 'wb')
file.write(json.dumps(data, sort_keys=True, indent=4))
file.close()

我像这样从 cmd 加载夹具:

python manage.py loaddata some_filename.json 

值和键对我来说似乎没问题。整个 json 中没有空值。 可能有什么问题? 谢谢:)

【问题讨论】:

  • 你是怎么得到这个json文件的?以及您是如何尝试加载它的?
  • @shellbye :已更新。

标签: python django django-fixtures


【解决方案1】:

你应该去掉json格式,正确的json文件是这样的:

[{"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}},...]

【讨论】:

  • 为什么?空格不是 json 有效的?
  • @Yukulélé Space 是 json 有效的,你可以使用 --indent 来使用格式版本。 ref
【解决方案2】:

您应该使用dumpdata 来创建您的灯具。

来自文档:

将数据库中与指定应用程序关联的所有数据输出到标准输出。

如果没有提供应用程序名称,所有已安装的应用程序都将被转储。

dumpdata的输出可以作为loaddata的输入。

请注意,dumpdata 使用模型上的默认管理器来选择要转储的记录。如果您使用自定义管理器作为默认管理器并且它过滤了一些可用记录,则并非所有对象都会被转储。

可以提供 --all 选项来指定 dumpdata 应该使用 Django 的基本管理器,转储可能会被自定义管理器过滤或修改的记录。

【讨论】:

  • 我将 .txt 文件中的数据作为 '\n' 分隔的 json 对象。我需要从中制作json。你能否详细说明如何做到这一点?我猜通常的 manage.py dumpdata > mydata.json 在那里不起作用?
猜你喜欢
  • 2011-04-18
  • 2023-03-16
  • 1970-01-01
  • 2013-03-06
  • 2011-04-18
  • 2013-10-24
  • 2015-02-14
  • 2010-11-30
  • 2015-01-01
相关资源
最近更新 更多