2010-05-17 7 views
2

Je dois afficher les entrées par date dans une application django et je suis un peu bloqué: Voici un exemple de mes modèles:Django annoter sur un « champ personnalisé » avec django-tri

class Event(models.Model): 
    name = models.CharField(max_length=100) 
    theme = models.ForeignKey(Theme) 
    ... 

class Date(models.Model): 
    event = models.ForeignKey(Event) 
    start = models.DateField() 
    end = models.DateField() 

    class Meta: 
     ordering = ['start', 'end'] 
     unique_together = ['event', 'start'] 

I J'ai une vue qui prend tous les événements dans la base de données: Event.objects.all()

puis dans un modèle, je montre la liste des événements avec leur thème et d'autres choses comme le début de la date. Je voudrais montrer dans la liste la première date, c'est facile avec une méthode personnalisée « future » sur le modèle d'événement:

def get_first_future_date(self): 
    today = datetime.datetime.now() 
    dates = self.date_set.filter(end__gte=today) 
    if dates: 
     return dates[0] 

Cette méthode, la première date future ou la date la plus ancienne qui n'est pas terminée.
Here's the problem : I would like to show that field in my template and be able to sort it with django-sorting.

Django tri utilise {%}% ancrage arg pour le faire, mais je ne sais pas comment gérer ce domaine dans ce ... Comment feriez-vous ???

Merci d'avance pour toute réponse.

+0

Je suis coincé dans la même situation. Avez-vous trouvé une solution pour cela? – Konstant

Répondre

0

Votre question n'est pas claire, pourquoi trieriez-vous le jeu de requête par le champ end lorsque get_first_future_date renvoie une seule instance de l'événement?

Eh bien, je ne l'ai jamais utilisé django-tri, mais je suppose que je ferais

events = Event.objects.all() # or filter(...) 
# pass events to the template context 

puis dans le modèle

{% load sorting_tags %} 
{% autosort events %} 
<thead> 
    <th>{% anchor start Starting at %}</th> 
    <th>{% anchor end Ending at %}</th> 
    ... 
</thead> 
{% for event in events %} 
<tr> 
    <td>{{event.start}}</td> 
    ... 
</tr> 
{% endfor %} 

Est-ce que vous demandez?

Questions connexes