私はDjangoにかなり単純なモデルを持っていますBook
.
class Book(models.Model):
name = models.CharField(max_length=255, default="")
description = models.TextField(null=True, blank=True)
creation_date = models.DateTimeField()
構造とデータは基本的に外部 API から取得されるため、それを独自のアプリに含めており、むしろ変更したくありません。
今、私は別の本の別のソースをプロジェクトに追加したいと思っていますが、ここで何が最善の解決策なのかよくわかりません.
2番目のモデルは次のとおりです。
class NextBook(models.Model):
title = models.CharField(max_length=255, default="")
long_description = models.TextField(null=True, blank=True)
created = models.DateTimeField()
したがって、基本的なフィールドはありますが、名前が異なります。この 2 つをまとめるには、おそらく GenericForeignKey を持つ別のモデルを使用できます。
class BaseBook(models.Model):
book_type = models.ForeignKey(ContentType)
book_id = models.PositiveIntegerField()
book_object = generic.GenericForeignKey('book_type', 'book_id')
しかし、たとえば機能しないため、すべての本を照会することはできませんBaseBook.objects.all().order_by('created')
。確かに、基本モデルの日時フィールドを複製してから、タイトルなどを複製することもできますが、それは間違った方向だと思います。また、特定のモデルに触れたくない場合、継承は選択肢ではないようです。
モデル構造とデータベースクエリを大幅に混乱させずに、より多くのプロバイダーとすべてのオブジェクトのクエリを効率的に「プラグイン」できる設計パターンまたは何かを探しています。