2010-09-04 20 views
8

Django per impostazione predefinita rende un campo chiave primario su ciascun modello denominato "id", con un tipo di AutoField. Sui miei modelli, sto ignorando questo per usare una chiave personalizzata UUIDField come chiave primaria usando l'attributo "primary_key". Vorrei anche che il modello User in django.contrib.auth avesse una chiave primaria come UUIDField, ma ciò non sembra possibile senza modificare il codice sorgente del modello User.modello utente django e campo chiave primaria personalizzato

C'è qualche modo consigliato per affrontare questo problema?

risposta

6

questo non sembra possibile senza modificare il codice sorgente del modello Utente.

Corretto. A meno che non vogliate cambiare (o sostituire) User non c'è un modo.

Un modo (tenue, hackish) per fare questo sarebbe quello di allegare un UserProfile per ogni istanza User. Ogni User deve avere esattamente unoUserProfile. È quindi possibile aggiungere il proprio UUIDField al profilo. Sarà comunque necessario eseguire query personalizzate per la conversione da UUIDField a id.

Se non ti piace il nome UserProfile puoi rinominarlo adeguatamente. La chiave è che hai una relazione uno-a-uno a User.

+0

Ho pensato che sarebbe stato il caso. Grazie. – Andrew

4

Con il rilascio di Django 1.5, il backend di autenticazione ora supporta modelli utente personalizzate:

https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model

Un campo di e-mail possono essere utilizzati come il campo nome utente e l'argomento primary_key può essere impostato su di esso:

class CustomUser(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField(max_length=254, unique=True, db_index=True, primary_key=True) 

    USERNAME_FIELD = 'email' 
Problemi correlati