如果使用Django的loaddata功能在数据库表中添加数据?

查看:1219
本文介绍了如果使用Django的loaddata功能在数据库表中添加数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

当我使用loaddata在默认的Account中添加数据的时候:

$ python manage.py loaddata account.yaml 
Installed 8 object(s) from 1 fixture(s)
$ cat account.yaml 
- model: users.account
  pk: 1
  fields:
    name: 超级管理员
    username: admin
    password: pbkdf2_sha256$36000$g1pikLFCBqKU$3nniFa7Tctd9bVQ1E8d8uGxRZGXhzExLHMF0ecCPjXU=
    is_superuser: True
    is_staff: True
    date_joined: 2017-08-09 17:16:14
    update: 2017-08-09 17:19:17

然而,在默认的Group中添加数据是:

$ cat group.yaml 
- model: django.contrib.auth.group
  pk: 1
  fields:
    name: operation
$ python manage.py loaddata group.yaml 
Traceback (most recent call last):
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/serializers/pyyaml.py", line 79, in Deserializer
    for obj in PythonDeserializer(yaml.load(stream, Loader=SafeLoader), **options):
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/serializers/python.py", line 99, in Deserializer
    Model = _get_model(d["model"])
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/serializers/python.py", line 192, in _get_model
    return apps.get_model(model_identifier)
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/apps/registry.py", line 198, in get_model
    app_label, model_name = app_label.split('.')
ValueError: too many values to unpack (expected 2)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    execute_from_command_line(sys.argv)
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/management/__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/management/commands/loaddata.py", line 69, in handle
    self.loaddata(fixture_labels)
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/management/commands/loaddata.py", line 109, in loaddata
    self.load_label(fixture_label)
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/management/commands/loaddata.py", line 166, in load_label
    for obj in objects:
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/serializers/pyyaml.py", line 85, in Deserializer
    six.reraise(DeserializationError, DeserializationError(e), sys.exc_info()[2])
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/serializers/pyyaml.py", line 79, in Deserializer
    for obj in PythonDeserializer(yaml.load(stream, Loader=SafeLoader), **options):
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/serializers/python.py", line 99, in Deserializer
    Model = _get_model(d["model"])
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/core/serializers/python.py", line 192, in _get_model
    return apps.get_model(model_identifier)
  File "/home/ansheng/.pyenv/versions/slock/lib/python3.6/site-packages/django/apps/registry.py", line 198, in get_model
    app_label, model_name = app_label.split('.')
django.core.serializers.base.DeserializationError: Problem installing fixture '/home/ansheng/work/slock/slock-platform/group.yaml': too many values to unpack (expected 2)

  • Group Model

这是默认的

@python_2_unicode_compatible
class Group(models.Model):
    """
    Groups are a generic way of categorizing users to apply permissions, or
    some other label, to those users. A user can belong to any number of
    groups.

    A user in a group automatically has all the permissions granted to that
    group. For example, if the group 'Site editors' has the permission
    can_edit_home_page, any user in that group will have that permission.

    Beyond permissions, groups are a convenient way to categorize users to
    apply some label, or extended functionality, to them. For example, you
    could create a group 'Special users', and you could write code that would
    do special things to those users -- such as giving them access to a
    members-only portion of your site, or sending them members-only email
    messages.
    """
    name = models.CharField(_('name'), max_length=80, unique=True)
    permissions = models.ManyToManyField(
        Permission,
        verbose_name=_('permissions'),
        blank=True,
    )

    objects = GroupManager()

    class Meta:
        verbose_name = _('group')
        verbose_name_plural = _('groups')

    def __str__(self):
        return self.name

    def natural_key(self):
        return (self.name,)

我该如何使用fixtures的功能往Django提供的模型中导入数据?

解决方案

缺少permission_id字段,取值范围1-84

这篇关于如果使用Django的loaddata功能在数据库表中添加数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆