Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使所有Django模型从特定类继承_Python_Django - Fatal编程技术网

Python 使所有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

我写了一个特定的函数,我希望我所有的Django模型都有这个函数。让我的所有模型从某个类继承的最佳方法是什么

我试过的没用。我创建了一个新类,如下所示:

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的: