2013-04-13 20 views
7


il mio obiettivo è quello di creare un modello di utente personalizzato in Django 1,5Impossibile creare super-utente con modello di utente personalizzato in 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'] 

non riesco a creare un super utente a causa del campo dell'azienda (models.ForeignKey ('Company') (python manage.py createsuperuser) la mia domanda:..
Come posso creare un super utente per la mia applicazione senza una società ho cercato di fare un MyUserManager personalizzato senza alcun successo:

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 

Oppure devo creare un'azienda fittizia per questo utente? Grazie

+0

Perché è necessaria azienda? – iMom0

+0

Nel mio modello, un utente senza un'azienda non può esistere. Ma c'è un'eccezione per il superutente. Ho ricevuto questo errore senza REQUIRED_FIELDS: IntegrityError: app_myuser.company_id potrebbe non essere NULL –

+1

È possibile specificare un'azienda predefinita per tutti. – iMom0

risposta

3

Ci sono tre modi per la vostra in questo caso

1) Fare relazione alla comapany Non richiesto company = models.ForeignKey('Company',null=True)

2) Aggiungi azienda di default e fornire come valore di default di campo chiave esterna company = models.ForeignKey('Company',default=1) # dove 1 è id della società creata

3) Lasciare il codice modello così com'è. Aggiungi comapny falso per superutente chiamato per esempio 'Superusercompany' impostalo nel metodo create_superuser.

UPD: secondo il tuo commento 3 sarebbe la soluzione migliore per non rompere la tua logica di bushiness.

2

Grazie al tuo feedback ecco la soluzione che ho fatto: Un MyUserManager personalizzato in cui ho creato una società di default

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 
Problemi correlati