Django modèle utilisateur (manageur)
Bonsoir,
Par rapport aux paramètres du manager de notre modele utilsateur (BaseUserManager).
Je pensais qu'en paramètre il fallait mettre les required fields (selon la doc si j'ai bien compris il faut les mettre).
Pourant si je les enlève ça revient au même. Je me suis demandé s'il n'y avait pas un lien avec les kwargs mais apparemment non.
Du coup vous avez une idée ? Car au final qu'on ait les required_fileds ou non peu importe...
Merci d'avance


Salut Gab,
À moins que je me trompe c'est bien le kwargs qui fait que ça fonctionne, tout simplement parce que si tu ne mets pas les paramètres par défaut requis (email, etc) explicitement dans la définition de la fonction, ils seront récupérés par kwargs tout de même. Si par contre tu enlèves **kwargs là tu risques d'avoir des problèmes car tous les endroits où Django utilise ces fonctions en envoyant des informations aux paramètres requis (email, first_name, etc), il n'y aura aucun paramètre dans ta fonction pour les récupérer.
Il est préférable de toujours être le plus explicite possible. Tu pourrais laisser juste les kwargs (et fonctionner ainsi en fait pour théoriquement 100% des fonctions que tu écris), mais imagine le casse-tête que ça serait pour quelqu'un qui lit ton code ^^ (il faudrait lire à chaque fois le corps de la fonction pour comprendre les paramètres qui sont utilisés).
Dans ce cas précis aussi, ces paramètres sont obligatoires, si tu mets juste **kwargs, tu ne serais pas obligé de les passer quand tu appelles la fonction. En mettant les paramètres sans valeur par défaut (+ le **kwargs pour récupérer les autres paramètres éventuels), tu empêches l'appel de la fonction sans passer d'argument à ces paramètres (ce qui est le comportement souhaité).
Et encore merci ^^
Pour le deuxième paragraphe je n'y avais pas pensé oui ! Donc dans tous les cas mettre les champs "username fields" et "requis".
Et dernière question par rapport à ça. Si tu ajoute un champ qui n'est pas "requis", tu le passes quand même dans les paramètres histoire d'être explicite ou pas forcément ?
Si jamais tu le passes en paramètre le champs non requis du coup vaut mieux lui attribuer une valeur par défaiut None ?
Oui, si tu veux ajouter un champ supplémentaire qui n'est pas "requis", tu peux le faire pour être plus explicite et faciliter la compréhension de ton code par les autres développeurs qui pourraient lire ou travailler dessus. Dans ce cas, il serait préférable de lui attribuer une valeur par défaut, comme None, pour que ce champ soit optionnel lors de l'appel de la fonction. Ainsi, ça permettra à ceux qui utilisent ta fonction de choisir s'ils veulent fournir ou non une valeur pour ce champ supplémentaire.
Les kwargs ça peut être utile pour des cas de figure plus spécifique.
Pour te donner un exemple, j'ai un template de bouton HTML créé par une fonction Python, j'ai des paramètres absolument obligatoire (le texte par exemple), d'autres qui sont optionnels (la couleur, par défaut c'est le bouton de base de Docstring donc je ne suis pas obligé de l'indiquer mais je peux changer pour bouton secondaire ou autre).
Et j'utilise les kwargs pour gérer tous les autres attributs que je pourrais avoir envie d'intégrer au bouton HTML. Par exemple il y a des boutons que je veux désactiver, donc je dois rajouter dans le html disabled=True. Ces paramètres là je les récupère dans les kwargs vu que ça peut être tout et n'importe quoi (ça serait trop long et inutile de rajouter manuellement dans la définition de la fonction tous les attributs HTML possibles).
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte