【发布时间】:2016-04-12 05:31:42
【问题描述】:
我是 Django 新手(自从我玩数据库以来已经有几年了),并且可能正在围绕一些我不知道该用谷歌搜索什么的简单的东西跳舞。
本质上,我想要一个“事件”表,其中可以包含各种类型的数据。假设一个事件是“警报”,另一个是“消息”。 “警报”类型需要与“消息”不同的字段,因此不将数据存储在一个包含任何事件可能需要的任何类型数据的大表中似乎是有意义的。但是,我希望能够获取给定“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