首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >姜戈,扩展BaseUserManager,

姜戈,扩展BaseUserManager,
EN

Stack Overflow用户
提问于 2015-03-28 21:03:11
回答 1查看 2.7K关注 0票数 1

我试图扩展Django的BaseUserManager,所以当您创建超级用户时,我正在检查一个organization是否存在(如果不是创建一个),然后用一个ForeignKey将用户分配给它。

我遇到的错误是:

代码语言:javascript
复制
Creating Demo Data...
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 55, in execute
    return super(Command, self).execute(*args, **options)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 160, in handle
    self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
  File "/Users/Manos/Projects/devboard/project/accounts/models.py", line 36, in create_superuser
    user = self.create_user(email, password=password)
  File "/Users/Manos/Projects/devboard/project/accounts/models.py", line 20, in create_user
    user.save(using=self._db)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/models/base.py", line 589, in save
    force_update=force_update, update_fields=update_fields)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/models/base.py", line 617, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/models/base.py", line 698, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/models/base.py", line 731, in _do_insert
    using=using, raw=raw)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/models/manager.py", line 92, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/models/query.py", line 921, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 920, in execute_sql
    cursor.execute(sql, params)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/backends/utils.py", line 81, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute
    return self.cursor.execute(sql, params)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute
    return self.cursor.execute(sql, params)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 129, in execute
    return self.cursor.execute(query, args)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/pymysql/cursors.py", line 134, in execute
    result = self._query(query)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/pymysql/cursors.py", line 282, in _query
    conn.query(q)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/pymysql/connections.py", line 768, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/pymysql/connections.py", line 929, in _read_query_result
    result.read()
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/pymysql/connections.py", line 1125, in read
    first_packet = self.connection._read_packet()
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/pymysql/connections.py", line 893, in _read_packet
    packet.check_error()
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/pymysql/connections.py", line 369, in check_error
    err.raise_mysql_exception(self._data)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/pymysql/err.py", line 120, in raise_mysql_exception
    _check_mysql_exception(errinfo)
  File "/Users/Manos/Projects/devboard/env/lib/python2.7/site-packages/pymysql/err.py", line 112, in _check_mysql_exception
    raise errorclass(errno, errorvalue)
django.db.utils.IntegrityError: (1048, u"Column 'organization_id' cannot be null")

我想是模特们做的事吧?

帐户

代码语言:javascript
复制
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from project.organizations.models import Organization

class UserManager(BaseUserManager):

    def create_user(self, email, password=None):
        ...

    def create_superuser(self, email, password):

        print "Creating Demo Data..."

        if Organization.objects.filter(name="Demo Inc.").count() < 1:
            organization = Organization.objects.create(name="Demo Inc.")
            organization.save()
            print "Demo data created successfully!"
        else:
            organization = Organization.objects.all().first()

        user = self.create_user(email, password=password)
        user.organization = organization
        user.is_active = True
        user.is_admin = True
        user.save(using=self._db)
        return user

用户模型

代码语言:javascript
复制
class User(AbstractBaseUser):

    id = models.AutoField(primary_key=True)  # custom User models must have an integer PK
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    email = models.EmailField(max_length=255, unique=True, db_index=True)
    full_name = models.CharField(max_length=255)
    organization = models.ForeignKey(Organization, related_name="users")

Organizations

代码语言:javascript
复制
class Organization(models.Model):

    id = UUIDField(primary_key=True, auto=True, db_index=True)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    name = models.CharField(max_length=200, unique=True)
    website = models.URLField(max_length=200, blank=True)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-28 21:13:25

错误发生在这里:

代码语言:javascript
复制
user = self.create_user(email, password=password)

此方法保存新创建的用户,并将organization设置为None。将组织的检查和分配从create_superuser()移到create_user()中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29322585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档