除了语法之外,使用django抽象模型和使用普通Python继承与django模型之间的区别是什么?优点和缺点?
更新:我认为我的问题被误解了,我收到了关于抽象模型和继承自django.db.models.Model的类之间差异的回复. 我实际上想知道继承自django抽象类(Meta:abstract = True)的模型类与继承自say,'object'(而不是models.Model)的普通Python类之间的区别.
这是一个例子:
class User(object):
first_name = models.CharField(..
def get_username(self):
return self.username
class User(models.Model):
first_name = models.CharField(...
def get_username(self):
return self.username
class Meta:
abstract = True
class Employee(User):
title = models.CharField(...
Run Code Online (Sandbox Code Playgroud) 有没有办法告诉django具有contenttypes GenericForeignKey的模型只能指向预定义列表中的模型?例如,我有4个模型:A,B,C,D和一个包含GenericForeignKey的模型X. 我可以告诉X,GenericForeignKey只允许A和B吗?
django django-models django-forms django-admin django-contenttypes
许多有经验的开发人员建议不要使用Django多表继承,因为它的性能很差:
Django的疑难杂症:混凝土继承由雅各布·卡普兰,莫斯,Django的一个核心因素.
几乎在所有情况下,抽象继承是一种长期更好的方法.我看到在混凝土继承引入的负载下,有很多网站被粉碎,所以我强烈建议Django用户在大量怀疑的情况下使用具体的继承.
Django中的两勺由丹尼尔·格林菲尔德(@pydanny)
多表继承,有时称为"具体继承",作者和许多其他开发人员认为这是一件坏事.我们强烈建议不要使用它.
不惜一切代价,每个人都应该避免多表继承,因为它会增加混乱和大量开销.而不是多表继承,在模型之间使用显式OneToOneFields和ForeignKeys,以便您可以控制何时遍历连接.
但是没有多表继承,我不能轻易
另一个模型中的参考基础模型(必须使用GenericForeignKey或反向依赖);
(随意添加更多)
那么Django中这种继承有什么问题?为什么明确的OneToOneField更好?
性能对JOIN的影响有多大?有没有显示性能差异的基准测试?
不会select_related()让我们连接被调用时控制?
django inheritance models concrete-inheritance multi-table-inheritance