我遇到了与 如何在 Django 中查询基于抽象类的对象类似的问题? 该线程建议使用 multi_table_inheritance。我个人认为使用 content_type 在概念上更舒服(感觉更接近逻辑,至少对我来说)
使用上一个链接中的示例,我只需添加一个 StelarType 作为
class StellarType(models.Model):
"""
Use ContentType so we have a single access to all types
"""
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
然后将其添加到抽象基础模型中
class StellarObject(BaseModel):
title = models.CharField(max_length=255)
description = models.TextField()
slug = models.SlugField(blank=True, null=True)
stellartype = generic.GenericForeignKey(StellarType)
class Meta:
abstract = True
为了在 StellarObject 和 StellarType 之间同步,我们可以连接 post_save 信号以在每次创建 Planet 或 Star 时创建一个 StellarType 实例。这样,我就可以通过 StellarType 查询 StellarObjects。所以我想知道使用这种方法反对使用 multi_table_inheritance 的优点和缺点是什么?我认为两者都在数据库中创建了一个附加表。但是数据库性能如何?可用性/灵活性如何?感谢您的任何意见!