私はこれらのクラスを持っているふりをします:
# 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)
実際のものはもう少し複雑ですが、それほど複雑ではありません。
A のタイプが「Report」の場合、Report クラスを追加のフィールドに使用したいと思います。Budget についても同様です。ただし、他のタイプには固有のフィールドがないため、独自のサブクラスは必要ありません。また、Record/DataEntry ごとに 3 つの ManyToMany フィールドを持たないようにしたいと思います...すべての添付ファイルのリストが望ましいですが、実際のタイプに応じて正しい作成/編集フォームを開く必要があります。
理想的には、ユーザーがタイプを変更したときに Report および Budget 固有のフィールドを追加および削除し、正しいタイプとして保存するインターフェイスが必要です。それを行うために独自のビューを作成することもできますが、小さなアプリの残りの部分は管理インターフェイスで行われるため、すべてをそのまま維持したいと考えていました。それで...管理インターフェイスでこの動作を取得する良い方法を誰か思いつくことができますか?