2013-04-13 15 views
7


moim celem jest stworzenie własnego modelu użytkownika w Django 1,5Nie można utworzyć super-użytkownika z niestandardowym modelu użytkownika w 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'] 

Nie mogę stworzyć super user powodu pola firmie (models.ForeignKey ("Firma") (python manage.py createsuperuser). Moje pytanie:
Jak utworzyć superużytkownika do mojej aplikacji bez firmy Próbowałem utworzyć niestandardowego MyUserManager bez powodzenia:

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 

Czy muszę utworzyć fałszywą firmę dla tego użytkownika? Dziękuję

+0

Dlaczego potrzebny jest firma? – iMom0

+0

W moim modelu użytkownik bez firmy nie może istnieć. Ale jest wyjątek dla superużytkownika. Otrzymałem ten błąd bez REQUIRED_FIELDS: IntegrityError: app_myuser.company_id nie może mieć wartości NULL –

+1

Możesz określić domyślną firmę dla wszystkich. – iMom0

Odpowiedz

3

Istnieją trzy sposoby na Państwa w tym przypadku

1) dokonać relacji do comapany Nie wymagane company = models.ForeignKey('Company',null=True)

2) Dodaj domyślny firmę i dostarczyć ją jako domyślną wartość pola klucza obcego company = models.ForeignKey('Company',default=1) # gdzie 1 jest identyfikatorem utworzonej firmy

3) Pozostaw kod modelu bez zmian. Dodaj fałszywą firmę dla superużytkownika o nazwie np. "Superusercompany" ustaw ją w metodzie create_superuser.

UPD: zgodnie z komentarzem 3 byłoby najlepszym rozwiązaniem, aby nie złamać logiki krzaczków.

2

Dzięki Twojej opinii tutaj jest rozwiązanie zrobiłem: Niestandardowy MyUserManager gdzie stworzyłem domyślny firmę

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 
Powiązane problemy