2014-01-03 2 views
2

Мой models.py выглядит следующим образом:Ограничение только определенным пользователям, чтобы изменить строку в списке на экране в админке Django

class Change(models.Model): 
    RFC = models.CharField(max_length=10) 
    Ticket_Number = models.CharField(max_length=10) 
    Plan_Owner = models.ForeignKey(User) 
    Plan_validater = models.ForeignKey(User) 

Мой admin.py выглядит следующим образом:

class ChangeAdmin(admin.ModelAdmin): 
    search_fields = ('RFC', 'Ticket_Number','Plan_Owner','Plan_validater') 
    list_display = ('RFC', 'Ticket_Number','Plan_Owner','Plan_validater') 

    fieldsets = [ 
    ('Ticket Details', { 
     'fields': ['RFC', 'Ticket_Number', 'Plan_Owner','Plan_validater']}), 
    ] 

    admin.site.register(Change, ChangeAdmin) 

Что Я хочу убедиться, что только владелец плана или плательщик плана для конкретного изменения могут его редактировать. Каждый может просмотреть его, но выполнение изменений в строке должно быть ограничено только владельцем изменения или планировщиком. Также они могут редактировать его и не удалять его. Только суперпользователь может добавлять или удалять изменения. This link на сайте Джанго упоминает некоторые подсказки, но мое отсутствие опыта с рамками мне мешает его реализации ...

+0

[Это] (http://www.b-list.org/weblog/2008/dec/24/admin/) может помочь вам –

+0

Это звучит, как вы собираетесь об этом неправильном пути. Почему вы предоставляете пользователям доступ к административной стороне сайта? Если вы не создаете какую-либо CMS-систему, вы можете создать свои собственные пользовательские разрешения для сторонних сайтов для конечных пользователей. Не позволяйте пользователям использовать административную сторону, позволяйте им делать все с самого сайта. – Joe

+0

Вы пытались использовать чистую функцию, чтобы проверить, есть ли у пользователя соответствующие права. – Armance

ответ

1

Это должно быть что-то вроде этого:

class ChangeAdmin(ModelForm): 


def clean(self): 
    if self.request.user != self.Plan_Owner or self.request.user != self.Plan_validater or not : 
     raise ValidationError(u'Permission denied') 
    else: 
     return self.cleaned_data 

Чтобы получить доступ к текущему пользователю, переопределение ModelAdmin.get_form, добавив запрос как атрибут только что созданного класса формы.

class EntryAdmin(admin.ModelAdmin): 
    form = EntryAdminForm 

    def get_form(self, request, *args, **kwargs): 
     form = super(EntryAdmin, self).get_form(request, *args, **kwargs) 
     form.request = request 
     return form 
+0

armance..thanks для этого..Я понял первую часть проверки разрешений и повышение ошибки проверки в форме. Однако я не могу понять вторую часть. У меня нет формы Entryadmin в моем приложении .It дает мне ошибку – Amistad

+0

Ошибка в объекте 'ChangeForm' не имеет атрибута 'request' – Amistad

+0

Именно поэтому вам нужна вторая часть, вы можете получить запрос доступа, если вы не переопределите modadmin – Armance