2014-11-27 2 views
0

Я пытаюсь создать отдельного пользователя для администратора django, который имеет ограниченные разрешения вместо обычного администратора. Я знаю, что лучший подход будет заключаться в использовании прокси-администратора, но я столкнулся с некоторыми проблемами.Django proxy admin

У меня есть структура моделей, которые вряд ли будут изменены. Каждая модель наследуется от некоторого абстрактного базового модельного класса. И я не могу добавить статью proxy=True. Структура моделей выглядит более или менее похоже, что:

class AbstractObject(models.Model): 
    @property 
    def some_property_that_applies_to_each_child_model(self): 
     pass 

    class Meta(): 
     abstract = True 

class ModelOne(AbstractObject): 
    id_field = models.IntegerField(primary_key=True) 
    @property 
    def some_custom_property(self): 
     pass 

class ModelTwo(AbstractObject): 
    id_field = models.IntegerField(primary_key=True) 
    @property 
    def some_other_custom_property(self): 
     pass 

теперь я хочу, чтобы создать ограниченную учетную запись администратора, который может сделать только некоторые действия, которые не имеют дело с БД. Я знаю, что мне нужно добавить proxy=True в определении class Meta для каждой модели, но он не работает ... Я получаю ошибку raise typeerror(proxy model %s has no non-abstract model base class. % name), что совершенно очевидно. Должен ли я создать какой-то не абстрактный шаблон базового макета класса и добавить его в таблицы db?

Я надеюсь, что вы получите представление о том, что я столкнулся с

ответ

0

Вы должны делать это так, как указано в documentation:

from django.db import models 

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 

class MyPerson(Person): 
    class Meta: 
     proxy = True 

    def do_something(self): 
     # ... 
     pass 
+0

да, я знаю это. Но в моем случае проблема в том, что каждая модель, у которой есть собственное представление в базе данных, первоначально наследуется от 'AbstractModel', которая фактически является абстрактной, поэтому он не имеет представления базы данных. Это всего лишь шаблон для определенного поведения каждой модели. Надеюсь, что это немного прояснилось ... – advena

0

Вы не можете создать прокси -модель абстрактного класса. Ваша Прокси-модель должна наследовать от не-абстрактной Модели. Попробуйте использовать прокси таким образом:

class AbstractBaseModel(models.Model): 
    #some code 

    class Meta(): 
     abstract = True 

class MyModel(AbstractBaseModel): 
    #some code 

class ProxyModel(MyModel): 
    #some code 

    class Meta: 
     proxy=True