多态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类型的附件,另一个字段只包含这些类型的附件。因为我们处理的是关系数据库,所以看起来您需要的是一个
代理模型。从一个表到另一个表插入/删除行似乎不是一个好的解决方案。