【问题标题】:Django - modeling - multi-table referenceDjango - 建模 - 多表参考
【发布时间】:2019-04-23 01:55:13
【问题描述】:

SOS - 帮助: 我是 django 的新手(我来自 PHP(Laravel)): 我需要对数据进行建模: 我有相同的模型,它们被命名为 Sources like(IOT,Sensosr,Totens,app 等)每个源都有你的特殊性(连接参数)和相似性,然后我有扫描,扫描使用源信息来执行(存储有关执行的信息)并在主机上制作活动。

我需要通过扫描将活动链接到源,以便在显示活动时显示有关主机、扫描和源的信息。 我学习抽象,但不是很清楚!

@dirkgroten 感谢您抽出宝贵时间,我将其编辑得更准确 看看这个模型: code

class Sensor (models.Model):
  creation_date  = models.DateTimeField(auto_now=True)
  ...fields

class Crawler (models.Model):
  creation_date  = models.DateTimeField(auto_now=True)
  ...fields

code 它们是我的 Sources Models ,数据活动来自哪里...... 然后 code

class Scan (models.Model):
  creation_date  = models.DateTimeField(auto_now=True)
 # Here I neet to link with a source, but source could be a Crawler, IOT, Sensor or API model
  ...fields

class Host (models.Model):
  creation_date  = models.DateTimeField(auto_now=True)
  ...fields

class Activities (models.Model):
  creation_date  = models.DateTimeField(auto_now=True)
  host  =  models.ForeignKey('Host',on_delete='DELETE')
  scan  =  models.ForeignKey('Scan',on_delete='DELETE')

code

当我列出显示活动时,我需要显示有关扫描及其来源的信息(来源) 像(Activity.Host 或 Activit.Scan.Source。) 在 PHP 中,我的 Scan 表有一个“源”标志和一个 ID 字段,所以我知道在哪个表中从源中获取数据。 我知道这不是正确的方法,所以我想使用 ORM 做得很好。 如果您能帮助我,我将不胜感激。

【问题讨论】:

  • 请查看How to Ask 了解如何以适当的方式为 SO 提出您的问题。您需要向我们展示您正在尝试使用代码做什么,向我们展示您的初始模型。请更具体。
  • 顺便说一句:谷歌“通过中间模型建立django关系”,你会发现很多东西。
  • @dirkgroten 感谢您抽出宝贵时间:
  • @dirkgroten 我重新提出我的问题!谢谢
  • 您需要使用泛型关系,如 here 所述。有一个blog post as a good example

标签: django model modeling


【解决方案1】:

我们希望将扫描表与不同的来源(如 IOT、Crawler 或 Sensor 或任何其他来源)相关联。 让我讨论一下这两种方法。

  1. 您可以为每个源设置不同的表,并通过它们之间的外部关系链接扫描表,但如果数据集变大,处理这些表会很麻烦。

  2. 因为,这些源具有预定义的一组字段,并且每个源都包含特定格式的数据。因此,创建一个具有字段 sourceType 的主表,即 iot、sender、crawler 或 api,并从这些源中提取所需的字段并放入主源模型中。并将其与扫描模型链接。您可以运行一些 cron 作业来处理来自不同来源的这些数据,redis 或 kafka 可以在这方面为您提供帮助。你也可以用 celery 来处理这些任务。

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 2020-08-28
    • 2011-06-16
    • 1970-01-01
    • 2022-08-06
    • 2017-04-10
    • 2012-12-01
    • 2013-06-26
    相关资源
    最近更新 更多