Changeset 522

Show
Ignore:
Timestamp:
02/02/10 11:23:10 (5 weeks ago)
Author:
olivier
Message:

add direct boolean argument to Location ancestors() and descendants()

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/telemeta/models/crem.py

    r521 r522  
    3939from telemeta.util.unaccent import unaccent_icmp 
    4040import re 
    41 from django.db.models import FieldDoesNotExist 
     41from django.db.models import FieldDoesNotExist, Q 
    4242from telemeta.models.core import DurationField, Duration, WeakForeignKey, EnhancedModel, \ 
    4343                                 CharField, TextField, IntegerField, BooleanField, \ 
     
    571571        return MediaCollection.objects.by_location(self) 
    572572 
    573     def ancestors(self): 
    574         return Location.objects.filter(descendant_relations__location=self) 
    575  
    576     def descendants(self): 
    577         return Location.objects.filter(ancestor_relations__ancestor_location=self) 
     573    def ancestors(self, direct=False): 
     574        q = Q(descendant_relations__location=self) 
     575        if direct: 
     576            q &= Q(descendant_relations__is_direct=True) 
     577        return Location.objects.filter(q)            
     578 
     579    def descendants(self, direct=False): 
     580        q = Q(ancestor_relations__ancestor_location=self) 
     581        if direct: 
     582            q &= Q(ancestor_relations__is_direct=True) 
     583        return Location.objects.filter(q)            
    578584 
    579585    def add_child(self, other): 
     
    658664        db_table = 'location_relations' 
    659665        unique_together = ('location', 'ancestor_location') 
     666 
     667    def __unicode__(self): 
     668        sep = ' > ' 
     669        if not self.is_direct: 
     670            sep = ' >..> '  
     671        return unicode(self.ancestor_location) + sep + unicode(self.location) 
    660672     
    661673class ContextKeyword(Enumeration):