summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit9e477fbeb6e9fb811968f31f937df5877b816aa7 (patch)
treea74db58ad7084e3e3ca5654bb9a89a4340b3c20e
parent63bb46ac8b05c7184c9ee50e7a76894b8722db52 (diff)
downloadChimère-9e477fbeb6e9fb811968f31f937df5877b816aa7.tar.bz2
Chimère-9e477fbeb6e9fb811968f31f937df5877b816aa7.zip
Fix property model filtering on edit pages
-rw-r--r--chimere/forms.py12
-rw-r--r--chimere/models.py24
-rw-r--r--chimere/views.py18
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')