多くの検索を行い、これを可能にするいくつかの手法 (実際の例ではさらに少ない手法) だけを見つけた後、それを紹介します。
以下は、私が取り組んでいるものと同様のクラス構造です。
# sources/models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=256)
slug = models.SlugField()
class Source(models.Model):
author = models.ForeignKey(Author)
url = models.URLField(help_text='The URL where a copy of the source can be found.')
class Book(Source):
title = models.CharField(max_length=256)
page = models.PositiveSmallIntegerField(help_text='Page where the source text appears.')
class MagazineArticle(Source):
magazine_name = models.CharField(max_length=256)
issue_date = models.DateField()
title = models.CharField(max_length=256)
別のアプリでは、次のようになります。
# excerpts/models.py
from django.db import models
from sources.models import Source
class Excerpt(models.Model):
excerpt = models.TextField()
source = models.ForeignKey(Source)
# Perhaps should be:
# source = models.OneToOneField(Source)
問題は、管理者が、それぞれの抜粋に個別のフィールドを持たずに、抜粋のソースとしてaBook
または a のいずれかを作成できるようにしたいということです。MagazineArticle
これを行うことについて私が読んだ方法の 1 つは、ジェネリック リレーションであり、代わりに抽象基本クラスを使用する可能性がありますが、私のコンテキストで意味のある例は見つかりませんでした。
これを実行する方法は何ですか(できれば例を使用して)?