мы используем 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)
это работает именно так, как я хочу: для недопустимых полей установите их только для чтения ...
Еще раз спасибо,