Django par défaut fait un champ de clé primaire sur chaque modèle nommé " Y a-t-il une façon recommandée d'aborder ce problème? P> ID code>", avec un type de
autofield code>. Sur mes modèles, je remplace cela pour utiliser un
uuidfield uuidfield uuidfield "en utilisant l'attribut"
primaire code> ". Je voudrais aussi le modèle code> code> dans
django.contrib.auth code> pour avoir un
uuidfield code> comme clé primaire, mais cela ne semble pas être possible sans changer le code de source code> utilisateur code>. p>
3 Réponses :
Cela ne semble pas être possible sans changer le code source de modèle d'utilisateur. P> blockQuote>
correct. Sauf si vous êtes prêt à changer (ou à remplacer)
utilisateur code> il n'y a pas de moyen. P>
Un moyen (ténu, hackish) de le faire serait de joindre un
userprofile code> pour chaque
utilisateur code>. Chaque utilisateur
code> doit avoir exactement un em>
userprofile code>. Vous pouvez ensuite ajouter votre
uuidfield code> au profil. Vous devrez toujours faire une interrogation personnalisée pour traduire depuis
uuidfield code> à
id code>. p>
Si vous n'aimez pas le nom
userprofile code> Vous pouvez le renommer de manière appropriée. La clé est que vous avez une relation individuelle à
utilisateur code>. P>
J'ai pensé que ce serait le cas. Merci.
Notez que cette réponse est longue dépassée. Voir les soviuts répondre à la place.
Avec la sortie de Django 1.5, le backend d'authentification prend désormais en charge les modèles utilisateur personnalisés:
https://docs.djangoproject.com/fr/dev/topics/auth/customizing/#ssubstitutant-a-custom-user-model p>
Un champ de messagerie peut être utilisé comme champ d'utilisateur et le Primument_key peut être défini dessus: P>
class CustomUser(AbstractBaseUser, PermissionsMixin): email = models.EmailField(max_length=254, unique=True, db_index=True, primary_key=True) USERNAME_FIELD = 'email'
Vous n'avez pas besoin db_index = true code>. "Notez que lorsque un unique est vrai, vous n'avez pas besoin de spécifier db_index, car unique implique la création d'un index." docs.djangoproject.com/fr/3.1/ref/models/fields / # unique
On pourrait tirer parti de l'abstraiteur code> et apportez les modifications suivantes
class CustomUser(AbstractUser): email = models.EmailField(max_length=254, unique=True, db_index=True, primary_key=True) name = models.CharField(max_length=50) USERNAME_FIELD = 'email' REQUIRED_FILEDS = ['name']