【问题标题】:adding a custom method to Meta class in django在 django 中向 Meta 类添加自定义方法
【发布时间】:2018-01-11 21:29:31
【问题描述】:

我有一个 AbstractBase 模型类,它被各自应用程序中的多个模型继承。我希望用户能够设置将在 Meta 类的 verbose_name 字段中使用的名称。如果用户在 AbstractBase 模型的某个字段中提供了名称,则该字段将用作详细名称

这是我迄今为止尝试过的

class AbstractBase(models.Model):
   ......
   custom_name = models.CharField(blank=True)

   class Meta(object):
      abstract = True

      def update_verbose_name(self, custom_name):
          if self.project_setting is not None:
              return verbose_name == self.custom_name

当我运行它时,它给了我TypeError: 'class Meta' got invalid attribute(s): update_verbose_name

还有其他方法可以解决这个问题吗?

【问题讨论】:

  • 这似乎不是一个好主意。一个模型有很多实例,你如何选择哪一个应该是包含详细名称的那个?
  • 将在我希望用户能够更新详细名称的模型中使用元继承 ` class Student(AbstractBase): # ... class Meta(AbstractBase.Meta): odering = name

标签: python django django-models metadata


【解决方案1】:

像这样改变缩进怎么样:

class AbstractBase(models.Model):
   ......
   custom_name = models.CharField(blank=True)

   def update_verbose_name(self, custom_name):
       if self.project_setting is not None:
           return verbose_name == self.custom_name

   class Meta(object):
      abstract = True

【讨论】:

  • 这个方法的问题是我无法在类外访问那些变量
  • 如果您执行AbstractBase,则意味着您希望类从此类继承...因此所有后代都可以访问self.custom_name,并且您可以从外部访问到custom_name 财产。那我没看到你的问题...
猜你喜欢
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
相关资源
最近更新 更多