Django代理管理员

时间:2014-11-27 20:07:29

标签: python django proxy django-admin

我正在尝试为django 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

现在我想创建一个限制管理员帐户,只能执行一些不处理db的操作。我知道我需要在每个模型的proxy=True定义中添加class Meta,但它不起作用......我得到的错误raise typeerror(proxy model %s has no non-abstract model base class. % name)非常明显。我应该创建某种非抽象模型基类模型类并将其添加到数据库表吗?

我希望你能理解我遇到过的事情

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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