gpt4 book ai didi

python - Django Model Mixins : inherit from models. 模型还是来自对象?

转载 作者:IT老高 更新时间:2023-10-28 21:42:42 26 4
gpt4 key购买 nike

这是一个关于 Python Mixins 的问题,一般来说可能很有用。我只是使用 Django 模型,因为这是我最熟悉的用例。

mixin 是否应该继承自它旨在与“object”混合的类?

代码示例,哪个更正确或更好,或者更好取决于您想要实现的目标?

这个

class TaggingMixin(models.Model):
tag = models.ForeignKey(Tag)

class Meta:
abstract = True

class MyModel(models.Model, TaggingMixin):
title = models.CharField(max_length=100)

或者这个:

class TaggingMixin(object):
tag = models.ForeignKey(Tag)

class Meta:
abstract = True

class MyModel(models.Model, TaggingMixin):
title = models.CharField(max_length=100)

我认为从对象继承是正确的方法。但是我在网上看到了第一个案例的例子......

编辑:我已将我的后续问题移至一个单独的问题:Django Abstract Models vs simple Python mixins vs Python ABCs

最佳答案

Django 在它的模型类方面做了很多元魔法,所以不幸的是,Daniel Roseman 的回答中建议的 mixins 的常用方法——它们从 object 继承——不起作用在 Django 世界中很好。

使用提供的示例构建 mixin 的正确方法是:

class TaggingMixin(models.Model):
tag = models.ForeignKey(Tag)

class Meta:
abstract = True

class MyModel(TaggingMixin):
title = models.CharField(max_length=100)

这里的重点是:

  • Mixins 继承自 model.Model,但被配置为抽象类。
  • 因为 mixins 继承自 model.Model,所以您的实际模型应该继承自它。如果这样做,这可能会触发一致的方法解析顺序异常。

关于python - Django Model Mixins : inherit from models. 模型还是来自对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3254436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com