Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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类中元类继承的相关概念。以下是模型,如果有人能帮助我,我将不胜感激 class Base(models.Model): code = AutoSlugField(_("Slug"), max_length=128, unique=True, populate_from='name') name = models.CharField(_("Name"), max_length=128,

作为新手,我有一个问题,我正在寻找Django类中元类继承的相关概念。以下是模型,如果有人能帮助我,我将不胜感激

class Base(models.Model):
    code = AutoSlugField(_("Slug"), max_length=128, unique=True,
                         populate_from='name')
    name = models.CharField(_("Name"), max_length=128, unique=True)
    description = models.TextField(_("Description"), blank=True)
    countries = models.ManyToManyField('Country',
                                       blank=True, verbose_name=_("Countries"))
    is_discounted = False
    class Meta:
        app_label = 'shipping'
        ordering = ['name']
        verbose_name = _("Shipping Method")
        verbose_name_plural = _("Shipping Methods")


class OrderAndItemCharges(Base):
    price_per_order = models.DecimalField(
        _("Price per order"), decimal_places=2, max_digits=12,
        default=D('0.00'))
    price_per_item = models.DecimalField(
        _("Price per item"), decimal_places=2, max_digits=12,
        default=D('0.00'))
    free_shipping_threshold = models.DecimalField(
        _("Free Shipping"), decimal_places=2, max_digits=12, blank=True,
        null=True)
    class Meta(Base.Meta):
        app_label = 'shipping'
        verbose_name = _("Order and Item Charge")
        verbose_name_plural = _("Order and Item Charges")
回溯:

    class OrderAndItemCharges(Base):
  File "C:\Users\AliKhan\supermarekt\market\shipping\models.py", line 46, in Or
derAndItemCharges
    class Meta(Base.Meta):
AttributeError: type object 'Base' has no attribute 'Meta'
我已经更改了类导入行为,以完成如下操作。这可能是问题的根源。原因是我需要简化商店仪表板应用程序的代码。因此,我导入了用于导入Django类的默认Django源代码,并对其进行了如下更改:

from django.apps.config import MODELS_MODULE_NAME
def get_class(module_label, classname):
    return get_classes(module_label, [classname])[0]
def get_classes(module_label, classnames):
    if not module_label:
        raise ValueError(
            "Module Does Not Exists")

    market_module_label = "%s" % (module_label)
    market_module = _import_module(market_module_label, classnames)
    return _pluck_classes([market_module], classnames)
def _import_module(module_label, classnames):
    try:
        return __import__(module_label, fromlist=classnames)
    except ImportError:
        __, __, exc_traceback = sys.exc_info()
        frames = traceback.extract_tb(exc_traceback)
        if len(frames) > 1:
            raise

文件名是loading.py,我是从Django Oscar那里学到的。然而,我做了一些细微的改变,以适应我的需要。所以问题可能就在这里。请协助

您应该声明您的
基础
类摘要,以便作为属性访问其

class A(models.Model):
    class Meta:
        app_label='yourapp'
        abstract=True

class B(A):
    class Meta(A.Meta):
        db_table='yourtable'

相关文档:

它以前是这样工作的。不知道是什么原因导致了这个问题……我已经更新了上面的问题,请查看这是否有帮助。模型不需要抽象才能继承其元模型。Basemodel需要抽象。如文档所述,只有当基本模型是抽象的时,才会在子模型中公开元类。否则你会得到一个AttributeError。元类也不是隐式继承的。但是,继承模型不会自动抽象。