2010-02-12 5 views
0

I ont des objets django:données supplémentaires sur les objets dans les modèles de django

class Event(models.Model): 
    title = models.CharField(max_length=255) 
    event_start_date = models.DateField(null=True, blank='true') 
    ... 

class RegistrationDate(models.Model): 
    event = models.ForeignKey(tblEvents) 
    date_type = models.CharField(max_length=10, choices=registration_date_type) 
    start_date = models.DateField(blank='true', null='true') 
    end_date = models.DateField(blank='true', null='true') 

Un événement peut avoir tôt, normal, et à la fin des périodes d'enregistrement.

j'ai écrit une fonction qui prend en un événement et retourne l'une: Aucun, « Early », « Normal » ou « Late »

Tout ce qui fonctionne très bien.

Dans mon application, je souhaite afficher la liste des événements et leur statut d'enregistrement. J'ai donc fait une requête en tant que telle.

Events = tblEvents.objects.all() 

Donc, j'ai toutes les informations sur l'événement, mais pas le statut.

Quelle est la manière la plus simple/la meilleure d'obtenir le statut de chaque événement affiché dans le modèle. Je pense que je peux écrire une balise de gabarit, mais cela semble plus de travail que nécessaire.

Répondre

5

Ajouter une propriété à votre classe Event .: par exemple

class Event: 
    # stuff here 

    @property 
    def status(self): 
    # do the same thing here as in your status function 
    return status 

Le vous pouvez faire dans votre modèle:

{{ event.status }} 
+0

Il n'a pas d'importance que la fonction interroge la table RegistrationDate? C'était ce qui m'avait empêché de le faire à l'origine. – lovefaithswing

+0

@lovefeithswing: Non, ce n'est pas grave. Si vous êtes préoccupé par les performances et que le résultat de la requête ne change pas souvent, vous pouvez mettre en cache le résultat: http://docs.djangoproject.com/fr/1.1/topics/cache/#the-low-level-cache -api –

2

Je pense que vous pouvez faire cette fonction que vous avez écrit une méthode de classe d'événement. Ensuite, vous pouvez simplement l'appeler à partir du modèle. Par exemple ...

{% if event %} 
    event.getStatus 
{% endif %} 

... mais je n'ai pas fait Django depuis un petit moment.

Questions connexes