diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-04-29 23:35:55 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-04-29 23:35:55 +0200 | 
| commit | 98e6cea9d17f8029f9b1f253282b33177826edfb (patch) | |
| tree | 2114fe50b6f9b8e4ac50b68801c0781af89b3615 /ishtar/furnitures/views.py | |
| parent | 18b053f2ecbaebd14e5378157890aac0d685a2d8 (diff) | |
| download | Ishtar-98e6cea9d17f8029f9b1f253282b33177826edfb.tar.bz2 Ishtar-98e6cea9d17f8029f9b1f253282b33177826edfb.zip | |
Manage hierarchy of types in search (closes #347)
Diffstat (limited to 'ishtar/furnitures/views.py')
| -rw-r--r-- | ishtar/furnitures/views.py | 21 | 
1 files changed, 19 insertions, 2 deletions
| diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index 107d9f3ea..66dfb7e8f 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -158,8 +158,10 @@ def format_val(val):              return unicode(_(u"False"))      return unicode(val) +HIERARCHIC_LEVELS = 5 +HIERARCHIC_FIELDS = ['period', 'unit', 'material']  def get_item(model, func_name, default_name, extra_request_keys=[], -                                             bool_fields=[]): +                                                    bool_fields=[]):      """      Generic treatment of tables      """ @@ -199,7 +201,22 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                      dct.pop(k)                  else:                      dct[k] = dct[k] == u"2" and True or False +        # manage hierarchic conditions +        or_reqs = [] +        for k in HIERARCHIC_FIELDS: +            for req in dct.copy(): +                if req.startswith(k): +                    val = dct.pop(req) +                    reqs = Q(**{req:val}) +                    req = req[:-2] + '__' +                    for idx in xrange(HIERARCHIC_LEVELS): +                        req = req[:-2] + 'parent__pk' +                        q = Q(**{req:val}) +                        reqs = reqs | q +                    or_reqs.append(reqs)          query = Q(**dct) +        for or_req in or_reqs: +            query = query & or_req          items = model.objects.filter(query)          q = request_items.get('sidx')          # manage tables @@ -456,7 +473,7 @@ get_contextrecord = get_item(models.ContextRecord,          'get_contextrecord', 'contextrecord',        extra_request_keys={'parcel__town':'parcel__town__pk',                    'parcel__operation__year':'parcel__operation__year__contains', -                  'datings__period':'datings__period__pk'}) +                  'datings__period':'datings__period__pk'},)  get_archaeologicalitem = get_item(models.Item,          'get_archaeologicalitem', 'item',          bool_fields = ['base_items__is_isolated'], | 
