diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-27 11:07:22 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-27 11:07:22 +0200 |
commit | 9e477fbeb6e9fb811968f31f937df5877b816aa7 (patch) | |
tree | a74db58ad7084e3e3ca5654bb9a89a4340b3c20e /chimere | |
parent | 63bb46ac8b05c7184c9ee50e7a76894b8722db52 (diff) | |
download | Chimère-9e477fbeb6e9fb811968f31f937df5877b816aa7.tar.bz2 Chimère-9e477fbeb6e9fb811968f31f937df5877b816aa7.zip |
Fix property model filtering on edit pages
Diffstat (limited to 'chimere')
-rw-r--r-- | chimere/forms.py | 12 | ||||
-rw-r--r-- | chimere/models.py | 24 | ||||
-rw-r--r-- | chimere/views.py | 18 |
3 files changed, 34 insertions, 20 deletions
diff --git a/chimere/forms.py b/chimere/forms.py index 1a0679b..e9239a0 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -273,8 +273,10 @@ class MarkerAdminFormBase(forms.ModelForm): area_name = None if 'area_name' in keys: area_name = keys.pop('area_name') - q = PropertyModel.getAvailable(area_name=area_name) - self.pms = [pm for pm in q.all()] + querys = PropertyModel.getAvailable(area_name=area_name) + self.pms = [] + for query in querys: + self.pms += [pm for pm in query.all()] if 'instance' in keys and keys['instance']: instance = keys['instance'] property_dct = {} @@ -444,8 +446,10 @@ class RouteAdminForm(forms.ModelForm): area_name = None if 'area_name' in keys: area_name = keys.pop('area_name') - q = PropertyModel.getAvailable(area_name=area_name) - self.pms = [pm for pm in q.all()] + querys = PropertyModel.getAvailable(area_name=area_name) + self.pms = [] + for query in querys: + self.pms += [pm for pm in query.all()] if 'instance' in keys and keys['instance']: instance = keys['instance'] property_dct = {} diff --git a/chimere/models.py b/chimere/models.py index 25b599b..8ab0b22 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -581,10 +581,12 @@ class GeographicItem(models.Model): """Get all the property availables """ properties = [] - for pm in PropertyModel.getAvailable(area_name=area_name): - property = self.getProperty(pm) - if property: - properties.append(property) + querys = PropertyModel.getAvailable(area_name=area_name) + for query in querys: + for pm in query.all(): + property = self.getProperty(pm) + if property: + properties.append(property) return properties def setProperty(self, pm, value): @@ -1855,14 +1857,16 @@ class PropertyModel(models.Model): def getAvailable(cls, area_name=None): if area_name and area_name.endswith('/'): area_name = area_name[:-1] - q = cls.objects.filter(available=True) + base_q = cls.objects.filter(available=True).annotate(Count('areas')) + q1 = base_q.filter(areas__count=0) if not area_name: - return q.annotate(Count('areas')).filter(areas__count=0) + return [q1] # areas__count__gt=0 necessary to prevent Django bug - return q.annotate(Count('areas'))\ - .filter( - (Q(areas__urn=area_name) & Q(areas__count__gt=0)) | - Q(areas__count=0)) + q2 = base_q.filter(Q(areas__urn=area_name) & Q(areas__count__gt=0)) + # if made it a single queryset the condition on 'count' is + # wrong - hope this will be fixed on higher Django version (>=1.4) + # to make a single query + return [q1, q2] class PropertyModelChoice(models.Model): diff --git a/chimere/views.py b/chimere/views.py index 9281e8d..9c9de11 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -344,9 +344,12 @@ def edit(request, area_name="", item_id=None, submited=False): item_id, init_item, response_dct, form, formset_multi, formset_picture = \ values # get the "manualy" declared_fields. Ie: properties - declared_fields = PropertyModel.getAvailable(area_name=area_name) - filtered_properties = declared_fields.filter( - subcategories__id__isnull=False).all() + querys = PropertyModel.getAvailable(area_name=area_name) + declared_fields, filtered_properties = [], [] + for query in querys: + declared_fields += query.all() + filtered_properties += query.filter( + subcategories__id__isnull=False).all() point_value = init_item.point if init_item else None if request.POST and request.POST.get('point'): point_value = request.POST.get('point') @@ -501,9 +504,12 @@ def editPolygon(request, area_name="", item_id=None, submited=False): values # get the "manualy" declared_fields. Ie: properties - declared_fields = PropertyModel.getAvailable(area_name=area_name) - filtered_properties = declared_fields.filter( - subcategories__id__isnull=False).all() + querys = PropertyModel.getAvailable(area_name=area_name) + declared_fields, filtered_properties = [], [] + for query in querys: + declared_fields += query.all() + filtered_properties += query.filter( + subcategories__id__isnull=False).all() polygon_value = init_item.polygon if init_item else None if request.POST and request.POST.get('polygon'): polygon_value = request.POST.get('polygon') |