2013-04-13 10 views
7


mục tiêu của tôi là tạo ra một mô hình người dùng tùy chỉnh trong Django 1,5Không thể tạo siêu người dùng với mô hình người dùng tùy chỉnh trong Django 1,5

# myapp.models.py 
from django.contrib.auth.models import AbstractBaseUser 

class MyUser(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=255, 
     unique=True, 
     db_index=True, 
    ) 
    first_name = models.CharField(max_length=30, blank=True) 
    last_name = models.CharField(max_length=30, blank=True) 
    company = models.ForeignKey('Company') 
    ... 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['company'] 

Tôi không thể tạo một người dùng siêu vì lĩnh vực công ty (models.ForeignKey ('Company') (python manage.py createuperuser) Câu hỏi của tôi:
Làm cách nào để tạo một người dùng siêu cho ứng dụng của tôi mà không có một công ty. Tôi đã cố gắng tạo MyUserManager tùy chỉnh mà không thành công:

class MyUserManager(BaseUserManager): 
    ... 

    def create_superuser(self, email, company=None, password): 
     """ 
     Creates and saves a superuser with the given email, date of 
     birth and password. 
     """ 
     user = self.create_user(
      email, 
      password=password, 
     ) 
     user.save(using=self._db) 
     return user 

Hoặc tôi có phải tạo công ty giả cho người dùng này không? Cảm ơn bạn

+0

Tại sao công ty là cần thiết? – iMom0

+0

Trong mô hình của tôi, người dùng không có công ty không thể tồn tại. Nhưng có một ngoại lệ cho superuser. Tôi nhận được lỗi này mà không REQUIRED_FIELDS: IntegrityError: app_myuser.company_id có thể không là NULL –

+1

Bạn có thể chỉ định một công ty mặc định cho tất cả. – iMom0

Trả lời

3

Có ba cách cho bạn trong trường hợp này

1) Thực hiện liên quan đến comapany Không bắt buộc company = models.ForeignKey('Company',null=True)

2) Thêm công ty mặc định và cung cấp nó như là giá trị mặc định cho lĩnh vực nước ngoài chủ chốt company = models.ForeignKey('Company',default=1) # trong đó 1 là id của công ty được tạo

3) Để nguyên mã mô hình. Thêm comapny giả cho superuser được đặt tên ví dụ 'Superusercompany' đặt nó trong phương thức create_superuser.

UPD: theo nhận xét của bạn 3 sẽ là giải pháp tốt nhất không để phá vỡ logic bushiness của bạn.

2

Nhờ phản hồi của bạn ở đây là giải pháp tôi đưa ra: Một MyUserManager tùy chỉnh mà tôi đã tạo ra một công ty mặc định

def create_superuser(self, email, password, company=None): 
     """ 
     Creates and saves a superuser with the given email and password. 
     """ 

     if not company: 
      company = Company(
       name="...", 
       address="...", 
       code="...", 
       city="..." 
      ) 
      company.save() 

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