【发布时间】:2020-06-22 18:30:10
【问题描述】:
我的 Django 代码中有一个全局配置变量列表,其中一些是整数,一些是字符串。
我目前正在使用 django-polymorphic,这样基本模型具有名称,子模型具有值。
例如:
class Configuration(PolymorphicModel):
name = models.CharField(max_length=128, unique=True)
def __str__(self):
return self.name
class ConfigurationInt(Configuration):
value = models.IntegerField(default=0)
def __str__(self):
return f'{self.name} = {self.value}'
class ConfigurationStr(Configuration):
value = models.CharField(max_length=256,default='')
def __str__(self):
return f'{self.name} = {self.value}'
然后将模型注册到管理部分,如下所示:
@admin.register(Configuration)
class ConfigurationAdmin(PolymorphicParentModelAdmin):
list_display = ('__str__',)
child_models = (ConfigurationInt, ConfigurationStr)
@admin.register(ConfigurationInt)
class ConfigurationIntAdmin(PolymorphicChildModelAdmin):
base_model = ConfigurationInt
@admin.register(ConfigurationStr)
class ConfigurationStrAdmin(PolymorphicChildModelAdmin):
base_model = ConfigurationStr
不幸的是,__str__ 部分仅在“配置”的共享列表视图中显示基类之一。 除了查看“ConfigurationInt”和“ConfigurationStr”的特定列表之外,无法以任何我能看到的方式访问该值。
有什么方法可以将它们实际列在一个不错的列表中吗?
假设我忘记了 django-polymorphic 并使用稀疏数据,这样每个配置都有一个整数和一个字符串,以及一些机制来说明它应该是什么,比如整数类型。 然后我可以在 __str__ 实现中显示正确的数据,但是在编辑时,它会同时显示两者。 在像这样的简单示例中这可能没问题,但是我也有更复杂的模型,它们具有广泛不同的领域,但在逻辑上都属于一个列表。 有没有办法在管理界面中隐藏/显示某些字段,例如在 list_display 和 list_editable 中,基于一个字段?
长话短说,有没有办法在管理界面中真正正确地实现多态列表? 让它在共享列表视图中可编辑会很棒,但即使只是实际显示信息,而只能在对象本身或特定列表中进行编辑,也会很好。
【问题讨论】:
标签: python django django-models django-admin