繁体   English   中英

Django 模型抽象基类之间的外键

[英]ForeignKey between Django Models abstract base classes

我有一个 Django 应用程序,我想在其中使用一组抽象基类来定义某些模型。 我想通过外键连接其中一些抽象模型。

我知道 Django 不允许models.ForeignKey抽象模型。 我在 StackOverflow 上做了一些搜索,一般的共识解决方案似乎是 - 使用GenericForeignKey 但是,根据我的理解,这会导致额外的数据库级SELECT调用。 我想避免这种情况,因为我的很多抽象模型都有这种关系。 下面给出一个例子:

class Person (models.Model):
    name = models.CharField (max_length=256)

    class Meta:
        abstract = True


class Phone (models.Model):
    phone_no = models.BigIntegerField ()
    owner = models.ForeignKey (Person) # This is, of course, wrong. I'd like something like this.

    class Meta:
        abstract = True

除了关于 GenericForeignKey 的帖子,我还看到了一个关于动态模型生成的帖子。 下面给出了链接。 问题海报本身已经提供了答案。

使用外键定义一个抽象模型到另一个抽象模型

我想问一下:

  1. 如果这仍然适用于当前版本的 Django,
  2. 如果有任何我应该注意的注意事项,以及
  3. 如果有更现代的解决方案?

谢谢你。

我已经解决了这个问题。 正如 Willem 和 Mohit 所指出的,我错误地思考了这个问题(我来自 Cpp 世界,对 Python/Django 编程思维非常陌生)。

我最终定义了没有任何关系的抽象类,然后从这些抽象类派生的具体类实际上定义了关系。 这也符合 DRY 原则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM