【问题标题】:Django models with inheritance, how to promote/demote instances?具有继承的 Django 模型,如何提升/降级实例?
【发布时间】:2015-09-20 15:20:52
【问题描述】:

在 Django 中,当我继承了模型时,如何在管理界面中进行升级/降级?

例子:

# models.py
class Person(models.Model):
    name=models.CharField()
class Artist(Person):
    medium=models.CharField()
classScientist(models.Model):
    field=models.CharField()


# admin.py
admin.site.register(Person)
admin.site.register(Artist)
admin.site.register(Scientist)

所以在管理员中,我可以一步创建人、艺术家或科学家。

但是:

  • 创建人员后,我无法将该人员提升为 WorkingPerson(这需要在 WorkingPerson 表中添加一行而不创建新人员)。
  • 创建 WorkingPerson 后,我无法将该人员降级为 Person(这将只需要删除 WorkingPerson 表中的行)。

非常感谢!

奥利维尔

【问题讨论】:

  • 对于你给出的例子,你真的需要继承吗?您可以创建一个与 Person 具有一对一字段的 Job 模型,然后在人们开始和完成工作时创建或删除工作对象。
  • 我的例子很糟糕,模型可能是人、艺术家、科学家等。我更新问题
  • 使用你的方法(我现在使用它作为一种解决方法),创建艺术家需要两个步骤:创建人,然后是艺术家。
  • 使模型正确比最小化步骤数更重要。应该可以将您的子模型作为内联添加到用户模型中,或者您可以创建自己的视图。

标签: django inheritance django-models django-admin


【解决方案1】:

我认为这可以帮助您“投射”这个。

person_object.__class__ = WorkingPerson

我前段时间读过这个Post,也许对你也有帮助。

【讨论】:

  • 我希望在管理员中提升/降级,不仅是为了演员,而且是为了真正改变记录。
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 2011-05-03
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多