Utilizzo del nuovo Configurable user model da Django 1.5 (1, 5, 0, 'beta', 2) ottengo questo errore durante l'esecuzione manage.py createsuperuser cercando di impostare una chiave esterna di un campo obbligatorio:Chiave esterna come campo obbligatorio nel modello utente configurabile di Django 1.5, createsuperuser dice: AttributeError: L'oggetto 'NoneType' non ha attributo '_state'
AttributeError: 'NoneType' object has no attribute '_state'
Dal momento che ho un fixtures/initial_data.yaml con i valori di cui ho bisogno per il mio modello di utente, flusso di lavoro è:
- Creare database
- python manage.py syncdb
- Rispondi "no" alla domanda Hai appena installato il sistema di autenticazione di Django, il che significa che non hai alcun superutente definito. Ti piacerebbe crearne uno adesso? (Sì/no)
- installate 14264 oggetti (s) da 1 proiettore (s)
- pitone manage.py createsuperuser
cerco di creare superutente dopo infissi sono importati, quindi questo è non è un problema causato da una tabella di database vuota per il modello City.
codice estratto, sulla base di 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']
Come posso ottenere la chiave esterna a lavorare sul mio modello di utente su un campo obbligatorio? Grazie.
Edit: Traceback da 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'
Dove si trova lo stacktrace completo? – borges
Ho eseguito creauperuser con l'opzione traceback: ho incluso il risultato sopra. – chirale
Stai usando più database nel tuo ptoject? – OrPo