私はDjangoを新しくしています(データベースと一緒に遊んでから数年経ちました)、私は何をGoogleに知らないのか単純なことを踊っているかもしれません。Django - 別のモデルで抽象モデルを使用できますか?
本質的に、私は様々なタイプのデータを含むことができる "イベント"のテーブルを持っています。あるイベントが「アラーム」で、別のイベントが「メッセージ」であるとします。 「アラーム」タイプは「メッセージ」とは異なるフィールドを必要とするので、イベントに必要なデータが入っている1つの大きなテーブルにデータを格納しないと意味があるようです。しかし、私は与えられた "event_block"外部キーのすべてのイベントのリストを取得できるようにしたい。
私は抽象モデルやプロキシなどについていくつかの読書を行っていますが、抽象モデルをどのモデルがどのモデルから参照できるかはわかりません。
models.py:
class Event(models.Model):
#id auto-generated primary_key
event_block = models.ForeignKey(Block, on_delete=models.CASCADE)
event_data = BaseEvent # This is wrong, but what is right?
class BaseEvent(Models.model):
class Meta:
abstract=True
... common event info ...
class AlarmEvent(BaseEvent):
... event info for alarms ...
class MessageEvent(BaseEvent):
... event info for messages ...
理想的には、私は(私のテンプレートでは、すべての利用可能なevent_typesでドロップダウンボックスを作成することができ、その後、そのイベントを作成するには、「送信」ボタンフォームをクリックします必要なイベントデータフィールドを持つ)をDjangoに渡し、Djangoがデータベーステーブルでどのように処理されるかの詳細を処理させます。
私には何が欠けていますか?
おかげ - それは私がまだ遭遇していない何かを。しかし、私の "イベント"タイプには、 "イベント"のすべての異なる "カテゴリ"のすべてのデータが含まれている必要があります。 – EMon
SO上の「汎用外部キー」のリンクは参考になります - 私と同様の質問のようです。このように私が望むものを得る正しい解決策になるかもしれないと思うが、それに価値がないほどの短所があるのだろうかと思う。 Djangoを使い始めると、保守性、速度、メモリなどを考慮して "正しい"解決策が何であるかを知ることは難しいです。 – EMon