Does anyone know why create_permissions doesn't work (or throw any
errors) when used in a view, but works when I run the same code in the
manage.py shell?

###### views.py #######
from django.db.models import get_app
from django.contrib.auth.management import create_permissions
from django.http import HttpResponseRedirect
from django.contrib.admin.views.decorators import
staff_member_required

@staff_member_required
def update_permissions_view(request):
    """Updates the permissions of the app"""
    app = get_app('edit_record')
    create_permissions(app, None, 2)
    referrer_url = request.META.get('HTTP_REFERER', None)
    return HttpResponseRedirect(referrer_url)

###### models.py #######
import datetime, urllib2
from django.db import models
from django.conf import settings
from django.db.models import signals, get_app
from django.contrib.auth.models import User
from django.contrib.auth.management import create_permissions

def update_perms():
    #Get Collection and Institution Permissions
    coll_dict = eval(urllib2.urlopen(settings.VOCABULARIES
+'collections/py/').read())
    inst_dict = eval(urllib2.urlopen(settings.VOCABULARIES
+'institutions/py/').read())
    permissions = ()
    for term in coll_dict['terms']:
        created_perm = ('coll_'+term['name'], 'coll_'+term['name'],)
        permissions += (created_perm,)
    for term in inst_dict['terms']:
        created_perm = ('inst_'+term['name'], 'inst_'+term['name'],)
        permissions += (created_perm,)
    #Add Metadata Editor and Metadata Publisher Permissions
    permissions += (('metadata_editor', 'metadata_editor',),
('metadata_publisher', 'metadata_publisher',),)

    return permissions

class Record(models.Model):
    """Defines the Record model """
    STATUS_CHOICES = (
        (0, 'Not Saved'),
        (1, 'Saved'),
    )

    name = models.CharField(max_length=50, unique=True)
    title = models.TextField()
    data = models.TextField()
    metadata_user = models.TextField()
    metadata_save_date = models.DateTimeField(auto_now=True)
    status = models.IntegerField(choices=STATUS_CHOICES)
    hidden = models.BooleanField()

class Perms(models.Model):
    class Meta:
        permissions = update_perms()

def notify_admin(sender, instance, created, **kwargs):
    '''Update permissions when a new user has been added.'''
    if created:
        app = get_app('edit_record')
        create_permissions(app, None, 2)
signals.post_save.connect(notify_admin, sender=User)

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to