Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:依赖于对象的条件ModelAdmin_Django_Django Admin_Django Modeladmin - Fatal编程技术网

Django:依赖于对象的条件ModelAdmin

Django:依赖于对象的条件ModelAdmin,django,django-admin,django-modeladmin,Django,Django Admin,Django Modeladmin,假设我有一个基类,例如: class Base(models.Model): name = models.CharField(max_length=50, blank=False, null=False) value1 = models.CharField(max_length=50) value2 = models.CharField(max_length=50) 现在,我将几种类型的对象输入到表中,其中一些使用部分数据,一些使用其他部分,所有这些对象都使用一些公共部

假设我有一个基类,例如:

class Base(models.Model):
    name = models.CharField(max_length=50, blank=False, null=False)
    value1 = models.CharField(max_length=50)
    value2 = models.CharField(max_length=50)
现在,我将几种类型的对象输入到表中,其中一些使用部分数据,一些使用其他部分,所有这些对象都使用一些公共部分(本例中的名称)

我想要一个完整的列表,但我想在单击对象时拥有不同的视图,这取决于对象的类型。modelAdmin中的更改包括:一个类使用内联线,其他类不使用内联线,列表显示不同,一个有额外的CSS,等等。基本上我们讨论的是不同的modelAdmin

我在想的备选方案之一是,这些类型中的每一个子类都是基本的,即:

class Type1(Base):
    pass

class Type2(Base):
    pass
然后,我为它们中的每一个定义了一个modelAdmin,为基类定义了一个modelAdmin,以便得到列出所有内容的表。在本例中,我将覆盖链接,使其不转到/app/base/id,而是转到/app/type1/id、/app/type2/id等,具体取决于类型。对于其中的每一个,我都会修改modelAdmins,以便在保存后返回到/app/type

一个不同的选择将有一个单一的模型和一个模型管理器,并且覆盖我使用的每一个用于CuxeYVIEW的方法来考虑它呈现的对象的类型,即GETY-ILLYNION实例、GETHyFub集合,无论我需要修改ListSoad显示、ListSyDePosiLink、ListaFug等等。 在我看来,第一个备选方案更为简洁,尽管我不确定如何修改链接,除了在modelAdmin中定义一个方法并正确调用reverse并将该方法添加为list_display中的一列之外

有没有更简单的方法让我错过?。你会怎么做

哦,它必须使用管理员。我宁愿使用视图或单独的模型来实现这一点,但遗憾的是,这是必须的。最高司令部希望所有东西都放在一张桌子上

谢谢

编辑:还有,我刚找到这个,看起来不错:


Django多态性似乎绝对是一条出路。它很容易使用,当我点击一个基本对象时,它会自动为我提供正确的modelAdmin,这是我无法用代理复制的

唯一的问题是,即使子类没有任何附加字段,也会为每个子类创建一个表,即使没有从中恢复任何内容,也会对每个子类执行一个额外的查询(表中只有一列是基对象的外键)

但它是有效的。我可以接受