2.如何两次添加模型到Django admin 中

你需要将Hero模型添加两次到Django admin 中,一个作为常规管理区域,另外一个是只读区域 。 如果你重复注册相同的模型两次:

  1. admin.site.register(Hero)
  2. admin.site.register(Hero)

你将会获取以下错误:

  1. raise AlreadyRegistered('The model %s is already registered' % model.__name__)

解决的方案是子类化Hero模型,作为ProxyModel:

  1. # In models.py
  2. class HeroProxy(Hero):
  3. class Meta:
  4. proxy = True
  5. ...
  6. # In admin.py
  7. @admin.register(Hero)
  8. class HeroAdmin(admin.ModelAdmin, ExportCsvMixin):
  9. list_display = ("name", "is_immortal", "category", "origin", "is_very_benevolent")
  10. ....
  11. @admin.register(HeroProxy)
  12. class HeroProxyAdmin(admin.ModelAdmin):
  13. readonly_fields = ("name", "is_immortal", "category", "origin",
  14. ...)