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管理,具有非抽象继承_Django_Django Models_Django Admin - Fatal编程技术网

多态Django管理,具有非抽象继承

多态Django管理,具有非抽象继承,django,django-models,django-admin,Django,Django Models,Django Admin,假设我有这些课程: # For storing arbitrary blobs class GenericAttachment(models.Model): # Some fields... type = models.PositiveSmallIntegerField("Type", choices=('Generic', 'Report', 'Image', 'Budget')) # Some methods... class ReportAttachment(G

假设我有这些课程:

# For storing arbitrary blobs
class GenericAttachment(models.Model):
    # Some fields...
    type = models.PositiveSmallIntegerField("Type", choices=('Generic', 'Report', 'Image', 'Budget'))
    # Some methods...


class ReportAttachment(GenericAttachment):
    # Report specific fields
    pass

class BudgetAttachment(GenericAttachment):
    # Budget-specific fields
    pass

class Record(models.Model):
    attachments = models.ManyToManyField(GenericAttachment, blank=True, null=True)

class DataEntry(models.Model):
    attachments = models.ManyToManyField(GenericAttachment, blank=True, null=True)
真正的要稍微复杂一些,但不多

当类型为“Report”时,我希望对额外字段使用Report类,对Budget也一样。但是,其他类型都没有自己的唯一字段,因此不需要自己的子类。我还希望避免每个记录/数据条目有3个太多的字段。。。最好列出所有附件,但它应根据实际类型打开正确的创建/编辑表单


理想情况下,我希望有一个界面,在用户更改类型时添加和删除报表和预算特定字段,并保存为正确的类型。我可以写我自己的观点来做这件事,但小应用程序的其余部分是通过管理界面完成的,我希望整个过程都是这样。所以有人能想出一个好办法在管理界面中实现这种行为吗?

或者,如果需要,我会选择一个好办法,在管理界面上拆分类型。我猜附件中会有一个字段不包括Budget和Report类型的附件,另一个字段只包含这些类型的附件。因为我们处理的是关系数据库,所以看起来您需要的是一个
代理模型。从一个表到另一个表插入/删除行似乎不是一个好的解决方案。