Após muito tempo sem postar volto aqui pra registrar (pra mim mesmo e a quem interessar), como criar permissões usando South. Obviamente para entender este post é necessário conhecer o South[1], Django[2] e Python[3]. Se não preenche nenhum dos requisitos provavelmente isso vai parecer grego.
Quando criamos um model no Django e adicionamos permissões (seja no Meta ou as permissões automáticas) o comando syncdb[4] as adiciona ao .model Permission [5]. Apesar disso, quem usa o South não usa syncdb e o south, muito simpático não cria as permissões. Explicado o problema, acredito...
Com isso frequentemente acabava criando as permissões manualmente via django admin porém em um grupo de desenvolvedores isso acaba sendo trabalhoso demais por que as bases deveriam ser o mais semelhantes possível Enfim, precisava de forma simples atualizar as permissões com o South. Obviamente uma datamigration seria a solução obvia, e procurando quais seriam os dados necessários encontrei no Stack Overflow[6] a resposta:
Primeiro vamos criar a datamigration:
python manage.py datamigration nome_da_app nome_que_quiser_descrevendo_a_data_migration
Esse comando vai gerar um arquivo XXXX_nome_que_quiser_descrevendo_a_data_migration.py. Abra o arquivo para edição. Vai haver um método fowards que deve ficar assim:
def forwards(self, orm):
ct = orm['contenttypes.ContentType'].objects.get(
model='nome_do_model', app_label='label_da_app')
orm['auth.permission'].objects.get_or_create(
content_type=ct, codename='codename_da_permission',
defaults=dict(name=u'Label da Permission')
)
Se quiser pode adicionar também o backwards:
def backwards(self, orm):
ct = orm['contenttypes.ContentType'].objects.get(
model='nome_do_model', app_label='label_da_app')
orm['auth.permission'].objects.filter(
content_type=ct, codename='codename_da_permission',
).delete()
Espero que ajude!
[1] http://south.aeracode.org/
[2] https://www.djangoproject.com/
[3] http://www.python.org.br/wiki
[4] https://docs.djangoproject.com/en/dev/ref/django-admin/#syncdb
[5] https://docs.djangoproject.com/en/dev/topics/auth/
[6]http://stackoverflow.com/questions/1742021/adding-new-custom-permissions-in-django
Nenhum comentário:
Postar um comentário