A instalação é simples:
pip install django-geoposition
Coloque a linha abaixo no seu arquivo settings.py, em INSTALLED_APPS:
INSTALLED_APPS = ( ... 'geoposition', ... )
Outra configuração que vale a pena fazer, é incluir no seu arquivo settings.py as linhas abaixo para definir o zoom:
GEOPOSITION_MAP_OPTIONS = { 'minZoom': 15, 'maxZoom': 18, }
No seu arquivo models.py, deixe como a seguir:
from geoposition.fields import GeopositionField from localflavor.br.br_states import STATE_CHOICES class SuaClasse(models.Model): """(Unidade description)""" endereco = models.CharField(max_length=255, verbose_name=u'Endereço', help_text='Para uma melhor localização no mapa, preencha sem abreviações. Ex: Rua Martinho Estrela, 1229') bairro = models.CharField(max_length=255,) cidade = models.CharField(max_length=255,help_text="Para uma melhor localização no mapa, preencha sem abreviações. Ex: Belo Horizonte") estado = models.CharField(max_length=2, null=True, blank=True,choices=U.STATE_CHOICES) position = GeopositionField(verbose_name=u'Geolocalização', help_text="Não altere os valores calculados automaticamente de latitude e longitude") class Meta: verbose_name, verbose_name_plural = u"Sua Classe" , u"Suas Classes" ordering = ('endereco',) def __unicode__(self): return u"%s" % self.endereco
No administrativo será gerado tudo automático, mas existem algumas melhorias que podem ser feitas pra ficar ainda mais bacana. Inclua o arquivo css e js abaixo que em seguida explico como faremos.
# coding: utf-8 from django import forms from django.contrib import admin from .models import * class SuaClasseForm(forms.ModelForm): class Media: css = { 'all': ('admin/css/geoposition_override.css',) } js = ('admin/js/geoposition_override.js',) class SuaClasseAdmin(admin.ModelAdmin): form = SuaClasseForm search_fields = ('endereco', 'cidade',) list_display = ('endereco', 'cidade','estado','bairro') list_filter = ['estado',] save_on_top = True admin.site.register(SuaClasse, SuaClasseAdmin)
No arquivo css adicionado (geoposition_override.css), iremos ocultar o campo de busca do mapa, e utilizaremos nossos próprios atributos da classe para tal, mesmo porquê, o atributo position irá só gravar em banco a latitude e longitude e não o endereço pesquisado.
Crie um arquivo dentro de <STATIC_DIR>/admin/css, chamado geoposition_override.cssm, e nele coloque simplemente a linha abaixo:
.geoposition-search input{display:none;}
Agora, crie um js chamado geoposition_override.js na pasta <STATIC_DIR>/admin/js com as linhas abaixo:
django.jQuery(document).ready(function($) { $('#id_position_0, #id_position_1').attr('readonly', 'readonly'); $('#id_endereco, #id_cidade, #id_estado').blur(function(event) { /* Act on the event */ if ($('#id_endereco').val()!='' && $('#id_cidade').val()!='' && $('#id_estado').val()!='') { $('.geoposition-search input').val($('#id_endereco').val()+' ' +$('#id_cidade').val()+' '+$('#id_estado').val()); // TRIGGER DO ENTER PARA EXECUTAR A BUSCA var e = $.Event("keydown"); e.which = 50; // # Some key code value $(".geoposition-search input").trigger(e); }; }); });
E o resultado:
hasta!
Nenhum comentário:
Postar um comentário