Nous lançons django - et partageons une base de données avec - une application existante. Et nous voulons utiliser une table "utilisateur" existante (pas celle de Django) pour stocker les informations utilisateur.Dans Django, comment pouvez-vous changer la classe User pour travailler avec une table db différente?
Il semble qu'il soit possible de changer le nom de la table que Django utilise, dans la classe Meta de la définition de l'utilisateur.
Mais nous préférerions ne pas changer le noyau Django lui-même.
Nous pensions que nous pouvions sous-classe la classe auth.User de base comme celui-ci:
class OurUser(User) :
objects = UserManager()
class Meta:
db_table = u'our_user_table'
Ici, le but est de ne pas ajouter des champs supplémentaires à la classe personnalisée de l'utilisateur. Mais juste pour utiliser la table alternative.
Cependant, cela ne fonctionne pas (probablement parce que le ORM est en supposant que le our_user_table devrait avoir une clé étrangère faisant référence à la table de l'utilisateur d'origine, qu'il ne fonctionne pas).
Alors, est-ce que c'est une façon sensée de faire ce que nous voulons faire? Ai-je manqué un moyen plus facile de mapper des classes sur des tables? Ou, si non, cela peut-il fonctionner?
Mise à jour:
Je pense que je pourrais être en mesure de faire le changement que je veux juste par « singe-patcher » le _meta de l'utilisateur dans un local_settings.py
User._meta.db_table = 'our_user_table'
Quelqu'un peut-il penser à quoi que ce soit mauvais qui pourrait arriver si je fais ça? (Particulièrement dans le contexte d'une application Django/Pinax assez typique?)
1 d'authentification alternative la source. –
Configurer un backend qui fait ce dont vous avez besoin est la manière standard et recommandée d'utiliser d'autres sources auth avec Django, c'est ce que cette personne devrait faire. En outre, une recherche rapide sur Google se révèle un certain nombre de backends authentiques dans la nature qui peuvent être utilisés comme exemples :) –
Merci. Peut-être que je n'étais pas assez clair mais c'est exactement ce que nous essayons de faire. (C'est-à-dire utiliser une authentification alternative et une sous-classe de l'utilisateur).Le problème est que, en créant une sous-classe, l'ORM s'attend maintenant à ce que la table personnalisée (notre table héritée) ait un champ qui est une clé étrangère à la table originale django auth_user. Et il jette une erreur parce que cela n'existe pas. – interstar