2013-06-27 3 views
1

J'ai un modèle qui est une application de travail, avec 3 états.Modèle Django propriété calculée

Accepté: explicitement accepté
Rejeté: rejeté explicitement
En attente: ni explicitement accepté ni rejeté

Il est logique pour moi de définir un accepted et un rejected champs pour mon modèle, donc je peux explicitement les définir . Mais la propriété pending est conditionnée en fonction des deux autres ... donc définir une propriété n'a pas de sens.

Je pourrais juste écrire une méthode pour cela, comme job.pending() qui renvoie un booléen qui est juste (not accepted) and (not rejected). Mais est-il possible de faire job.pending sans écrire une méthode?

curiosité ...

+0

Vous pouvez définir un [géré Attribute] (https://docs.djangoproject.com/en/dev/glossary/#term-property) – karthikr

+1

Pourquoi Hésitez-vous d'avoir un ' Méthode pending()? –

+0

Pas "réticent", juste curieux. Je suis d'accord que 'pending()' serait la chose la plus élégante à faire, puisque c'est le moins de travail et ne casse aucun comportement par défaut. – reedvoid

Répondre

2

Vous pouvez remplacer la méthode save() de faire quelque chose comme ça, de sorte que chaque fois que vous changez votre modèle de travail, il recalcule en attente. Bien que je suis d'accord avec les feux de la rampe, la méthode pending() n'est pas mauvaise non plus.

class Job(models.Model): 
    accepted = ... 
    reject = ... 
    pending = ... (Boolean Fields) 

    def save(self, *args, **kwargs): 
     self.pending = (not self.accepted) and (not self.rejected) 
     super(Job, self).save(*args, **kwargs) # Call the "real" save() method. 

https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-predefined-model-methods

Questions connexes