Разрешения администратора django для изменения атрибутов модели

мы используем django для разработки приложения для управления клиентами, и нам нужно установить разрешения для агента, может ли он / она редактировать атрибуты клиента ().

Например,

если у меня есть модель:

class Customer(models.Model):
    # basic information
    name = models.CharField(max_length=150) # the name of this customer
    date = models.DateField(auto_now_add=True) # the date that this customer is created

    # personal information
    citizen_id = models.BigIntegerField(blank=True)
    phone = models.BigIntegerField(max_length=20, blank=True)
    work = models.CharField(max_length=100, blank=True)
    address = models.CharField(max_length=300, blank=True)
    bank_card = models.BigIntegerField()

    # installation detail 
    primary = models.IntegerField(default=0)
    secondary = models.IntegerField(default=0)
    region = models.ForeignKey(Region) # the region that this customer currently lives in
    type = models.ForeignKey(Type) # the installation type
    group = models.ForeignKey(Group)

    STATUS_CHOICES = (
                  ('Active', 'Active'),
                  ('Inactive', 'Inactive'),
                  ('Transfered', 'Transfered'),
                  ('Closed', 'Closed'),
                  ('Suspended', 'Suspended'),
                  ('Cancelled', 'Cancelled'),
                  )

    status = models.CharField(max_length=40, choices=STATUS_CHOICES)

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

пользователь A может редактировать телефон, адрес, работу и Citizen_id, пользователь B может редактировать только телефон и адрес, пользователь C может редактировать Citizen_id, ..... и т. д.

и я хочу иметь возможность устанавливать разные разрешения

Возможно ли это сделать? Было бы очень полезно, если бы я мог использовать систему администрирования django для управления агентами и клиентами.

======================= Большое спасибо за ответ FallenAngel.

Я думаю, это именно то, что мы хотим.

это то, что я пробовал,

в admin.py

class CustomerAdmin(admin.ModelAdmin):
    def change_view(self, request, object_id, extra_context=None):
        agent = Agent.object.get(user=request.user)
        permitted_fields = agent.permitted_fields # assume i have this setup...
        self.readonly_fields = get_not_permitted_fields(premitted_fields) # assume I have this function written somewhere
        return super(CustomerAdmin, self).change_view(request, object_id,
            extra_context=None) 

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

еще раз спасибо,


person Maxim Mai    schedule 16.02.2011    source источник


Ответы (1)


Это возможно... Вы должны использовать методы администрирования django как они описаны здесь... Вы должны определить функции add_view, change_view и changelist_view...

Вы также должны найти способ группировать пользователей (группы могут быть хорошим способом, или вы можете использовать разрешения). Я создаю модель, которая расширяет модель пользователя, но вы можете найти свой собственный путь...

Во-вторых, напишите основные функции добавления, изменения и просмотра списка, такие как:

class CustomerAdmin(admin.ModelAdmin):
    list_display= ["fields that will be used for all users"]

    def changelist_view(self, request, extra_context=None):
        if request.user == "type a":
            self.list_display.extend["list of other fields"]
        return super(CustomerAdmin, self).changelist_view(request, extra_context)

Вы должны указать добавление, изменение (и список изменений, если требуется) представления и обрабатывать каждый тип пользователя. Затем Django покажет пользователю связанные поля. Вы расширяете list_display, fields, exclude, list_filter и такие методы отображения полей администратора django...

person FallenAngel    schedule 16.02.2011