Would it be possible to add these extra admin methods into a parent class; 
and then have all your individual model admins inherit from it?  Ditto for 
the models.py

On Sunday, 8 February 2015 21:15:42 UTC+2, Hangloser Firestarter wrote:
>
> Solved.
>
> In __init__.py
> ...
> from django.db.models.signals import post_syncdb
> from django.contrib.contenttypes.models import ContentType
> from django.contrib.auth.models import Permission
>
> def add_view_permissions(sender, **kwargs):
>     """
>     This syncdb hooks takes care of adding a view permission too all our 
>     content types.
>     """
>     # for each of our content types
>     for content_type in ContentType.objects.all():
>         # build our permission slug
>         codename = "view_%s" % content_type.model
>
>         # if it doesn't exist..
>         if not Permission.objects.filter(content_type=content_type, 
> codename=codename):
>             # add it
>             Permission.objects.create(content_type=content_type,
>                                       codename=codename,
>                                       name="Can view %s" % 
> content_type.name)
>             print("Added view permission for %s" % content_type.name)
>
> # check for all our view permissions after a syncdb
> post_syncdb.connect(add_view_permissions)
> ...
>
> In admin.py
> ...
> class MyAdmin(admin.ModelAdmin):
>     def has_change_permission(self, request, obj=None):
>         ct = ContentType.objects.get_for_model(self.model)
>         salida = False
>         if request.user.is_superuser:
>             salida = True
>         else:
>             if request.user.has_perm('%s.view_%s' % (ct.app_label, 
> ct.model)):
>                 salida = True
>             else:
>                 if request.user.has_perm('%s.change_%s' % (ct.app_label, 
> ct.model)):
>                     salida = True
>                 else:
>                     salida = False
>         return salida
>
>     def get_readonly_fields(self, request, obj=None):
>         ct = ContentType.objects.get_for_model(self.model)
>         if not request.user.is_superuser and 
> request.user.has_perm('%s.view_%s' % (ct.app_label, ct.model)):
>             return [el.name for el in self.model._meta.fields]
>         return self.readonly_fields
> ...
>
> in models.py
> ...
> class City(models.Model):
>     nome_cidade = models.CharField(max_length=100)
>     estado_cidade = models.CharField(max_length=100)
>     pais_cidade = models.CharField(max_length=100)
>
>     def __str__(self):
>         return self.nome_cidade
>
>     class Meta:
>         permissions = (
>             ('view_city', 'Can view city'),
>         )
> ...
>
> Thank's for help!
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/74f952fe-f0f5-4fb3-abd4-d6736cbd2743%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to