有没有办法在模型中表达Django管理员设置,而不是admin.py?

时间:2009-12-16 20:13:08

标签: django django-models django-admin

谈论Django 1.1.1。我曾经想过(0.96)在admin.py文件中放置的东西是模型内部类的一部分。

将所有这一切放在一个地方有一定的美感。但我不知道这种改变是否是必要的。任何令人信服的理由都是这样或那样的?

4 个答案:

答案 0 :(得分:2)

他们带走了那个特殊的魔法,但没有什么可以阻止你把你的admin.ModelAdmin子类放在models.Model子类本身之后。我更喜欢把它们放在一起,因为我不太可能忘记在列表中添加一个字段以显示在管理显示中。

答案 1 :(得分:0)

也许将这些东西放在模型中也不是一个好主意,因为当使用该网站作为非管理员时,这将是多余的信息? (出于性能原因)

答案 2 :(得分:0)

没有任何方法可以将模型定义中的管理选项表示为最新版本中的内部类。但是没有理由不能将ModelAdmin类放在models.py文件中的Model类之后。然后,您可以在定义后立即调用admin.site.register()。

对于模型,您可能会遇到多次调用register()的问题,这会产生错误。 models.py应该只加载一次,所以这应该工作。如果没有,你绝对可以在models.py中声明你的ModelAdmin类,然后将所有的register()调用放在admin.py中。

我可以想到把它们放在admin.py中的几个原因是:

  • 惯例 - 似乎这已成为最佳做法。
  • 解耦 - 管理员定义与模型没有太大关系。
  • 清洁 - 可能不需要用你不会改变太多的东西来填充你的models.py文件。

但是如果你的models.py文件不会很长,我可以看到让它们彼此相邻的吸引力。

答案 3 :(得分:0)

在你的模型中使用类Admin作为你使用类Meta 然后定义你想要的东西