segunda-feira, 29 de novembro de 2010

Widget para many to many field interessante

Normalmente quando se faz um many to many, é gerado no admin do django um select com a opção multiple. Porém para quando este caso tem bastante registro, a usabilidade não fica das melhores. Até encontrar um item que procura na lista vai tempo.

Para resolver esse problema adicione a linha abaixo no seu Model Admin:

filter_horizontal = ('nome_do_campo_m2m',)

Desta forma este campo passará ter as mesma interface/usabilidade do esquema de permissões do módulo de usuários do django.

hasta!

quinta-feira, 25 de novembro de 2010

Brincando com datas e calendarios no Python

Tente isso no interpretador interativo:

import calendar
cal = calendar.month(2010, 12)
print cal

Nunca foi tão fácil gerar um calendário. =)

Outras informaçãoes: http://www.tutorialspoint.com/python/python_date_time.htm

hasta!

Somar datas no Python

Simples.
O exemplo a seguir calcula uma data futura a dois meses da data atual:

from datetime import datetime, timedelta
meses = 2
dias_por_mes = 30
hoje = datetime.now()
dt_futura = hoje + timedelta(dias_por_mes*meses)

hasta!

'MediaDefiningClass' object is not iterable

Verifique nos arquivos admin.py a ordem de registro de uma classe para administração.
O correto deve ser:

admin.site.register(Model, ModelAdmin)

hasta!

quinta-feira, 11 de novembro de 2010

Lentidão para rodar um projeto no windows em rede?

Para Win7:

- Desabilitar o IPV6 da placa de rede


Para as demais versões:

- Edite o arquivo C:\Windows\System32\drivers\etc\hosts e coloque as linhas abaixo no final do arquivo: (nao esquecer de colocar o seu IP e o nome da sua máquina na rede)
XXX.XXX.XXX.XXX NOME_DA_MAQUINA
XXX.XXX.XXX.XXX:PORTA NOME_DA_MAQUINA:PORTA

Troque os "X" pelo IP (modo IPv4)

hasta!

quinta-feira, 28 de outubro de 2010

Gerar slug apartir de uma string

No admin é fácil. Basta utilizar o prepopulated_fields, mas caso precise fazer na mão ou em alguma view, segue uma def que resolve o serviço:

def toSlug(value):
    import unicodedata
    import re
    from django.utils.safestring import mark_safe
    value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
    value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
    return mark_safe(re.sub('[-\s]+', '-', value))

terça-feira, 26 de outubro de 2010

Alterando o formato da data para input em pt-br no ModelForms

Para alterar o formato de digitação das datas, coisa muito comum em vários forms, sempre era feito no js ou tinha que tratar de alguma forma no POST. Utilizando o input_formats o Django resolve esse problema de uma forma mais elegante:

No forms.py do Model utilize assim:

class Classe(ModelForm):
    datanascimento = forms.DateField(label=u"Nascimento", input_formats=['%d/%m/%Y'], widget=forms.DateInput(format='%d/%m/%Y'))

hasta!

quarta-feira, 14 de julho de 2010

Configurando o WSGI da Locaweb

Deixe o arquivo index.wsgi (~/public_html/[project_name]) como descrito abaixo:

import os, sys

DISPATCH = os.path.dirname(os.path.abspath(__file__))

sys.path.insert(0, os.path.join(DISPATCH,'../../wsgi_apps/'))
sys.path.insert(0, os.path.join(DISPATCH,'../../wsgi_apps/[project_name]/'))

os.environ['DJANGO_SETTINGS_MODULE']='[project_name].settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()


hasta!

sexta-feira, 18 de junho de 2010

Ordenar/Embaralhar uma lista em python

Ordenar na maioria das linguagens de programação é bem fácil, sempre é alguma coisa relacionada com "sort". No Python não é diferente:


>>> a = [3,2,4,5,1,6,7]
>>> a.sort()
>>> print a
[1, 2, 3, 4, 5, 6, 7]

Vamos agora embaralhar a lista recém ordenada:

>>> import random
>>> random.shuffle(a)
>>> print a
[4, 2, 3, 7, 1, 6, 5]


Difícil né..
hasta!