2012-12-17 25 views
7

Sử dụng Configurable user model mới từ Django 1.5 (1, 5, 0, 'beta', 2) tôi nhận được lỗi này khi chạy manage.py createsuperuser cố gắng thiết lập một chính nước ngoài của một trường bắt buộc:Khóa ngoài theo trường bắt buộc trên mô hình người dùng có cấu hình Django 1.5, tạo superuser nói: AttributeError: đối tượng 'NoneType' không có thuộc tính '_state'

AttributeError: 'NoneType' object has no attribute '_state'

Kể từ khi tôi đã là một fixtures/initial_data.yaml với các giá trị tôi cần cho mô hình của tôi sử dụng, quy trình làm việc là:

  1. Tạo cơ sở dữ liệu
  2. python manage.py syncdb
  3. Trả lời "không" cho câu hỏi Bạn vừa cài đặt hệ thống xác thực của Django, có nghĩa là bạn không có bất kỳ superusers nào được xác định. Bạn có muốn tạo một tài khoản ngay bây giờ không? (Yes/no)
  4. cài đặt 14.264 đối tượng (s) từ 1 vật cố (s)
  5. python manage.py createsuperuser

tôi cố gắng tạo superuser sau khi đồ đạc được nhập khẩu, vì vậy đây là không phải là một vấn đề gây ra bởi một bảng cơ sở dữ liệu rỗng cho mô hình Thành phố.

Mã trích đoạn, dựa trên documentation:

models.py

class City(models.Model): 
    city = models.CharField(max_length=70, help_text="City.") 
    state = models.CharField(max_length=2, help_text="State.") 
    class Meta: 
     ordering = ['city'] 
    def __unicode__(self): 
     return "%s (%s)" % (self.city, self.state) 

class PersonaManager(BaseUserManager): 
    [...] 
    def create_superuser(self, email, name, birthplace, password): 
     """ 
     Creates and saves a superuser with the given email, date of 
     birth and password. 
     """ 
     user = self.create_user(email, 
      password=password, 
      name=name, 
      birthplace=birthplace, 
     ) 
     user.is_admin = True 
     user.save(using=self._db) 
     return user 

class Person(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=255, 
     unique=True, 
     db_index=True, 
    ) 
    name = models.CharField(max_length=60) 
    birthplace = models.ForeignKey('myapp.City', related_name="person_birthplace") 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 

    objects = PersonaManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['name', 'birthplace'] 

Làm thế nào tôi có thể nhận được chìa khóa nước ngoài làm việc trên mô hình của tôi sử dụng trên một trường bắt buộc? Cảm ơn bạn.

Edit: Traceback từ manage.py createsuperuser --traceback:

Traceback (most recent call last): 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/core/management/base.py", line 222, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/core/management/base.py", line 252, in execute 
    output = self.handle(*args, **options) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 112, in handle 
    user_data[field_name] = field.clean(raw_value, None) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 211, in clean 
    self.validate(value, model_instance) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 1014, in validate 
    using = router.db_for_read(model_instance.__class__, instance=model_instance) 
    File "/home/asd/Envs/envdjango15/local/lib/python2.7/site-packages/django/db/utils.py", line 142, in _route_db 
    return hints['instance']._state.db or DEFAULT_DB_ALIAS 
AttributeError: 'NoneType' object has no attribute '_state' 
AttributeError: 'NoneType' object has no attribute '_state' 
+1

Stacktrace hoàn chỉnh ở đâu? – borges

+0

Tôi đã thực hiện createuperuser với tùy chọn traceback: Tôi đã bao gồm kết quả ở trên. – chirale

+1

Bạn đang sử dụng nhiều cơ sở dữ liệu trong ptoject của bạn? – OrPo

Trả lời

3

Không chắc chắn 100% rằng điều này sẽ sửa chữa nó, nhưng chỉ cần cho đá, chiến thuật trên PermissionsMixin và yank ra khỏi is_superuser tắt mô hình của bạn.

Có thể có một số loại kiểm tra quyền đang diễn ra ở chế độ nền - được cấp điều đó không nên xảy ra nhưng hãy chụp.

Nghi ngờ của tôi xuất phát từ khái niệm về việc cố gắng tìm ra những quyền mô hình cần thiết để áp dụng.

Các vấn đề liên quan