【问题标题】:Django proxy adminDjango 代理管理员
【发布时间】:2014-11-27 20:07:29
【问题描述】:

我正在尝试为 django 管理员创建单独的用户,该用户具有有限的权限而不是常规管理员。我知道最好的方法是使用代理管理员,但我遇到了一些问题。

我有模型结构,不太可能改变。每个模型都继承自一些抽象基模型类。而且我无法添加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 无关的操作。我知道我需要在每个模型的class Meta 定义中添加proxy=True,但它不起作用......我收到错误raise typeerror(proxy model %s has no non-abstract model base class. % name),这很明显。我应该创建某种非抽象模型基础模拟类并将其添加到数据库表中吗?

我希望你能明白我遇到了什么

【问题讨论】:

    标签: python django proxy django-admin


    【解决方案1】:

    您不能创建抽象类的代理模型。您的代理模型需要从非抽象模型继承。尝试以这种方式使用代理:

    class AbstractBaseModel(models.Model):
        #some code
    
        class Meta():
            abstract = True
    
    class MyModel(AbstractBaseModel):
        #some code
    
    class ProxyModel(MyModel):
        #some code
    
        class Meta:
            proxy=True
    

    【讨论】:

      【解决方案2】:

      你应该这样做,如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
      

      【讨论】:

      • 是的,我知道。但在我的情况下,问题是每个模型在数据库中都有自己的表示,最初继承自AbstractModel,这实际上是抽象的,所以他没有数据库表示。它只是每个模型某些特定行为的模板。希望这有点澄清......
      猜你喜欢
      • 2017-08-02
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2011-08-13
      相关资源
      最近更新 更多