def get_queryset(self): queryset = self.model.objects.filter(is_active=True) if not self.form.is_valid(): return queryset data = self.form.cleaned_data group = data.get('group', None) if group: queryset = queryset.filter(group=group) latlng = self.form.point if latlng: # Convert to geographic coords queryset = queryset.transform(get_geographic_srid()) # Constrain by distance if set up max_distance = self.get_max_distance() if max_distance: queryset = queryset.filter( location__distance_lte=(latlng, max_distance)) # Add distance query queryset = queryset.distance(latlng) # Convert back to geodetic coords queryset = queryset.transform(get_geodetic_srid()) # Order by distance queryset = queryset.order_by('distance') return queryset
def geocoordinates(self, data): latitude = data.get('latitude', None) longitude = data.get('longitude', None) if latitude and longitude: return GEOSGeometry('POINT(%s %s)' % (longitude, latitude), get_geodetic_srid()) query = data.get('query', None) if query is not None: try: return geocode.GeoCodeService().geocode(query) except geocode.ServiceError: return None
def get_queryset(self): queryset = self.model.objects.filter(is_active=True) group = self.request.POST.get('group', None) if group: queryset = queryset.filter(group=group) location = self.request.POST.get('location', None) if location: point = GEOSGeometry(location) queryset = queryset.transform( get_geographic_srid() ).distance( point ).transform( get_geodetic_srid() ).order_by('distance') return queryset
def get_queryset(self): queryset = self.model.objects.filter(is_active=True) if not self.form.is_valid(): return queryset data = self.form.cleaned_data group = data.get('group', None) if group: queryset = queryset.filter(group=group) latlng = self.form.point if latlng: queryset = queryset.transform( get_geographic_srid()).distance(latlng).transform( get_geodetic_srid()).order_by('distance') return queryset
def get_queryset(self): queryset = self.model.objects.filter(is_active=True) if not self.form.is_valid(): return queryset data = self.form.cleaned_data group = data.get('group', None) if group: queryset = queryset.filter(group=group) latlng = self.form.point if latlng: queryset = queryset.transform( get_geographic_srid() ).distance( latlng ).transform( get_geodetic_srid() ).order_by('distance') return queryset
class Store(models.Model): name = models.CharField(_('Name'), max_length=100) slug = models.SlugField(_('Slug'), max_length=100, null=True) # Contact details manager_name = models.CharField(_('Manager name'), max_length=200, blank=True, null=True) phone = models.CharField(_('Phone'), max_length=64, blank=True, null=True) email = models.CharField(_('Email'), max_length=100, blank=True, null=True) reference = models.CharField( _("Reference"), max_length=32, unique=True, null=True, blank=True, help_text=_("A reference number that uniquely identifies this store")) image = models.ImageField(_("Image"), upload_to="uploads/store-images", blank=True, null=True) description = models.CharField(_("Description"), max_length=2000, blank=True, null=True) location = PointField( _("Location"), srid=get_geodetic_srid(), ) group = models.ForeignKey('stores.StoreGroup', related_name='stores', verbose_name=_("Group"), null=True, blank=True) is_pickup_store = models.BooleanField(_("Is pickup store"), default=True) is_active = models.BooleanField(_("Is active"), default=True) objects = StoreManager() class Meta: abstract = True ordering = ('name', ) def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.name) super(Store, self).save(*args, **kwargs) def __str__(self): return self.name def get_absolute_url(self): return reverse('stores:detail', kwargs={ 'dummyslug': self.slug, 'pk': self.pk }) @property def has_contact_details(self): return any([self.manager_name, self.phone, self.email])