Python 使所有Django模型从特定类继承
我写了一个特定的函数,我希望我所有的Django模型都有这个函数。让我的所有模型从某个类继承的最佳方法是什么 我试过的没用。我创建了一个新类,如下所示:Python 使所有Django模型从特定类继承,python,django,Python,Django,我写了一个特定的函数,我希望我所有的Django模型都有这个函数。让我的所有模型从某个类继承的最佳方法是什么 我试过的没用。我创建了一个新类,如下所示: from django.db import models class McifModel(models.Model): pass 然后我在另一个模型中这样做: from django.db import models, connection, transaction from mcif.models.mcif_model impor
from django.db import models
class McifModel(models.Model):
pass
然后我在另一个模型中这样做:
from django.db import models, connection, transaction
from mcif.models.mcif_model import McifModel
class Customer(mcif.models.McifModel):
id = models.BigIntegerField(primary_key=True)
customer_number = models.CharField(unique=True, max_length=255)
social_security_number = models.CharField(unique=True, max_length=33)
name = models.CharField(unique=True, max_length=255)
phone = models.CharField(unique=True, max_length=255)
deceased = models.IntegerField(unique=True, null=True, blank=True)
do_not_mail = models.IntegerField(null=True, blank=True)
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
但我有一个错误:
Traceback (most recent call last):
File "./import.py", line 6, in <module>
from mcif.models import GenericImport, Customer, CSVRow
File "/home/jason/projects/mcifdjango/mcif/models/__init__.py", line 4, in <module>
from mcif.models.account_address import AccountAddress
File "/home/jason/projects/mcifdjango/mcif/models/account_address.py", line 2, in <module>
from mcif.models.account import Account
File "/home/jason/projects/mcifdjango/mcif/models/account.py", line 2, in <module>
from mcif.models.customer import Customer
File "/home/jason/projects/mcifdjango/mcif/models/customer.py", line 4, in <module>
class Customer(mcif.models.McifModel):
NameError: name 'mcif' is not defined
回溯(最近一次呼叫最后一次):
文件“/import.py”,第6行,在
从mcif.models导入常规导入、客户、CSVRow
文件“/home/jason/projects/mcifdjango/mcif/models/_init__.py”,第4行,在
从mcif.models.account\u地址导入AccountAddress
文件“/home/jason/projects/mcifdjango/mcif/models/account_address.py”,第2行,在
从mcif.models.account导入帐户
文件“/home/jason/projects/mcifdjango/mcif/models/account.py”,第2行,在
从mcif.models.customer导入客户
文件“/home/jason/projects/mcifdjango/mcif/models/customer.py”,第4行,在
类别客户(mcif.models.McifModel):
NameError:未定义名称“mcif”
因为您没有导入mcif
——您导入了McifModel
。试试这个:
from mcif.models.mcif_model import McifModel
class Customer(McifModel):
...
因为您没有导入mcif
——您导入了McifModel
。试试这个:
from mcif.models.mcif_model import McifModel
class Customer(McifModel):
...
在Django中处理继承时应该小心。除非父类被声明为抽象类,否则每次查询从其继承的子类时,数据库都将执行可能影响性能的联接。如果您只需要它们共享一个函数,那么最好将父模型声明为抽象模型,这样可以提供相同的功能,但性能更好。我该怎么做?我在谷歌搜索“python抽象类”时没有看到任何清晰的例子。(我熟悉其他语言中的抽象类,但在Python中它似乎并不简单。)更具体地说:在Python中似乎无法使类抽象,只能使用方法。因为我在McifModel中没有任何方法,所以我不知道该怎么做。它是Django,而不是特定于python的:在Django中处理继承时应该小心。除非父类被声明为抽象类,否则每次查询从其继承的子类时,数据库都将执行可能影响性能的联接。如果您只需要它们共享一个函数,那么最好将父模型声明为抽象模型,这样可以提供相同的功能,但性能更好。我该怎么做?我在谷歌搜索“python抽象类”时没有看到任何清晰的例子。(我熟悉其他语言中的抽象类,但在Python中它似乎并不简单。)更具体地说:在Python中似乎无法使类抽象,只能使用方法。因为我在McifModel中没有任何方法,所以我不知道该怎么做。它是Django,而不是特定于python的: