Méthodes de classe de modèle Django pour les valeurs prédéfinies
Je travaille sur quelques Django-code qui a un modèle comme celui-ci:
class Status(models.Model):
code = models.IntegerField()
text = models.CharField(maxlength=255)
Il y a environ 10 pré-défini de code/texte de paires qui sont stockées dans la base de données. Dispersés autour de la base de code, je vois un code comme ceci:
status = Status.objects.get(code=0) # successful
status = Status.objects.get(code=1) # failed
Je préférerais avoir une méthode pour chaque sorte que le code devrait ressembler à quelque chose comme ceci à la place:
status = Status.successful()
status = Status.failed()
etc...
Est-ce possible? J'ai regardé dans le Gestionnaire des trucs, mais je n'ai pas vraiment trouvé un moyen. Est-il temps de vraiment RTFM?
En Java, ce serait une méthode statique et en Ruby, vous serait-il suffit de définir une méthode sur l'auto, mais il n'est pas facile en Python, est-il?
source d'informationauteur Jörgen Lundberg
Vous devez vous connecter pour publier un commentaire.
Vous devriez peut-être mettre en œuvre ce par la définition d'un custom manager pour votre classe, et l'ajout de deux méthodes du gestionnaire sur que le gestionnaire (qui je crois est la meilleure façon pour l'ajout au niveau de la table de la fonctionnalité pour tout modèle). Cependant, une autre façon de le faire est de jeter dans les deux les méthodes de la classe sur votre classe de requête et retourner les objets qui en résultent, tels que:
Ne remarque que
get()
est susceptible de lancer de différentes exceptions, commeStatus.DoesNotExist
etMultipleObjectsReturned
.Et pour un exemple de mise en œuvre de la façon de faire la même chose à l'aide de Django gestionnaires, vous pourriez faire quelque chose comme ceci:
Où, vous pourriez faire
Status.objects.successful()
etStatus.objects.failed()
pour obtenir ce que vous désirez.