2014-12-08 3 views
0

Я не знаю, возможно ли это, но вот чего я хочу достичь.tweak django admin default permission

В django admin есть три разрешения по умолчанию. добавление/изменение/удаление.

Что я хочу, это что-то вроде разрешения «просмотра», вроде как «изменение», но без возможности редактирования.

У меня есть модель страны, когда клиент создан, ему необходимо выбрать страну, поскольку это внешний ключ.

Но если я установил это поле только для чтения, он не сможет выбрать страну, как я хочу. Поэтому я должен дать пользователю «изменить» разрешение, чтобы страна была доступна, когда пользователь создавал информацию о клиенте.

Дайте разрешение «изменить» в порядке, но было бы лучше, если у него есть разрешение «просмотреть».

Я проделал большой поиск и не нашел «идеальное» решение.

Я думаю, что многие люди тоже захотят этого разрешения.

Итак, как сделать это пользовательское разрешение «просмотра» и интегрироваться с администратором django плавно.

+0

И? В чем вопрос? –

+0

Как сделать такое разрешение «просмотра». – castiel

+0

https://docs.djangoproject.com/en/1.7/topics/auth/customizing/#custom-permissions и https://docs.djangoproject.com/en/1.7/topics/auth/default/#programmatically-creating -Permissions. И вам, возможно, придется переопределить пару методов в ModelAdmins. –

ответ

0

Я надеюсь, что это поможет вам:

class Client(models.Model): 
    name = models.CharField(...) 
    readonlyfield = models.CharField(...) 
    country = models.ForeignKey(...) 

    class Meta: 
     permissions = (
      ("change_country", "Can change country"), 
     ) 

class ClientAdmin(admin.ModelAdmin): 
    fields = ['name', 'readonlyfield', 'country'] 

    def get_readonly_fields(self, request, obj=None): 
     if obj and not request.user.has_perm('yourapp.change_country'): 
      return['readonlyfield', 'country'] 
     else: 
      return['readonlyfield'] 

Таким образом, если пользователь не имеет разрешения change_country, он будет установить поле страны один раз (при создании)