As vezes, algumas views requer permissões mais rígidas, como por exemplo alguma view de integração, carga, ou até mesmo para dados sigilosos.
Para tal, basta utilizar o decorator staff_member_required, que permite apenas acesso aos membos da equipe.
Para fazer uso do mesmo basta importar em seu arquivo views.py ou admin_views.py :
from django.contrib.admin.views.decorators import staff_member_required
E na view utilizar como qualquer outro decorator:
@staff_member_required
def sua_view(request):
#seu código aqui
hasta!
Django 1.9
Quem sou eu
Pesquisar
Marcadores
Admin
(18)
ajax
(2)
auditoria
(1)
autenticação
(1)
change list
(1)
CKEditor
(3)
Class Based Views
(4)
ColorPicker
(1)
contrab
(2)
Dicas
(64)
django
(2)
Django 1.3
(11)
Django 1.4
(10)
Django 1.6
(6)
Django 1.7
(4)
Django 1.8
(10)
Django 1.9
(4)
Django 2.0
(1)
Django/Python
(58)
E-mail
(1)
Erros Frequentes
(19)
Facebook API
(2)
Flash
(1)
Formset
(3)
Function Based Views
(1)
Git
(2)
ImagesLoaded
(1)
Inlines
(3)
Instagram API
(1)
Instalação
(10)
Interface
(1)
Javascript
(1)
JSON
(1)
Lion
(1)
Login único
(1)
MAC
(2)
maps
(1)
Masonry
(1)
Middleware
(2)
ModelForm
(4)
MySQL
(5)
normalização
(1)
ordenação
(1)
OSX
(1)
paginação
(2)
Parser
(2)
PDF
(2)
plugins-uteis
(6)
RegEx
(1)
RSS
(1)
slugify
(1)
South
(2)
SSH
(1)
Terminal
(1)
Tradução
(2)
tutorial
(10)
Twitter API
(1)
Twitter Style Pagination
(1)
upload
(1)
Vagrant
(2)
Validação
(2)
Virtualenv
(4)
Watermark
(3)
Widgets
(1)
segunda-feira, 7 de novembro de 2011
sexta-feira, 4 de novembro de 2011
Forçar incluir pelo menos um dos inlines
Normalmente temos casos que a inclusão de um determinado conteúdo, depende de outro e para facilitar a vida do usuário (e a nossa), o django possui um recurso muito interessante: O Admin Inline.
Este é util para quando, por exemplo, iremos inserir um conteúdo com múltiplas fotos, sendo que cada foto possui uma legenda.
Para tal, não precisamos disponibilizar o admin de Fotos, visto que não tem sentido nenhum o usuario inserir uma foto, fora de algum conteúdo.
Até aqui tudo tranquilo e o inline fica assim:
from django import forms
from models import Foto, Conteudo
class FotoInline(admin.TabularInline):
model = Foto
extra = 0
class ConteudoAdmin(admin.ModelAdmin):
inlines = [
FotoInline
]
Desta forma o django cria os inlines dentro do conteudo para inserir quantas fotos quiser.
E se, nosso layout obrigasse o conteúdo a ter pelo menos uma foto? Não precisa socar o designer a seu lado não, nem muito menos colocar campos obrigatórios de foto e legenda no model de Conteúdo, basta utilizar um formset:
class Verifica_FK_Formset(forms.models.BaseInlineFormSet):
def is_valid(self):
return super(Verifica_FK_Formset, self).is_valid() # and not any([bool(e) for e in self.errors])
def clean(self):
count = 0
for form in self.forms:
try:
if form.cleaned_data and not form.cleaned_data.get('DELETE', False):
count += 1
except AttributeError:
pass
if count < 1:
raise forms.ValidationError('Inclua pelo menos uma linha de %s' % (self.model._meta.verbose_name,))
E alterar o seu inline para que fique da seguinte forma:
Este é util para quando, por exemplo, iremos inserir um conteúdo com múltiplas fotos, sendo que cada foto possui uma legenda.
Para tal, não precisamos disponibilizar o admin de Fotos, visto que não tem sentido nenhum o usuario inserir uma foto, fora de algum conteúdo.
Até aqui tudo tranquilo e o inline fica assim:
from django import forms
from models import Foto, Conteudo
class FotoInline(admin.TabularInline):
model = Foto
extra = 0
class ConteudoAdmin(admin.ModelAdmin):
inlines = [
FotoInline
]
Desta forma o django cria os inlines dentro do conteudo para inserir quantas fotos quiser.
E se, nosso layout obrigasse o conteúdo a ter pelo menos uma foto? Não precisa socar o designer a seu lado não, nem muito menos colocar campos obrigatórios de foto e legenda no model de Conteúdo, basta utilizar um formset:
class Verifica_FK_Formset(forms.models.BaseInlineFormSet):
def is_valid(self):
return super(Verifica_FK_Formset, self).is_valid() # and not any([bool(e) for e in self.errors])
def clean(self):
count = 0
for form in self.forms:
try:
if form.cleaned_data and not form.cleaned_data.get('DELETE', False):
count += 1
except AttributeError:
pass
if count < 1:
raise forms.ValidationError('Inclua pelo menos uma linha de %s' % (self.model._meta.verbose_name,))
E alterar o seu inline para que fique da seguinte forma:
class FotoInline(admin.TabularInline):
formset = Verifica_FK_Formset
model = Foto
extra = 0
Desta forma, ao menos um item do inline de Fotos deverá ser inserido quando for inserir e/ou alterar um Conteúdo.
hasta!
Assinar:
Postagens (Atom)