python - Django - 模型混合没有按预期工作
问题描述
在PipedriveSync
我使用GenericForeignKey
的模型中,任何模型都可以PipedriveSync
与对象相关。
class PipedriveSync(TimeStampedModel):
...
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
而且我曾经GenericRelation
能够向后引用这个对象。例如user.pipedrivesyncs.all()
看一眼User
class User(AbstractUser):
pipedrivesyncs = GenericRelation('pipedrive.PipedriveSync')
由于我必须pipedrivesyncs
为许多模型指定相同的内容,因此我决定为此创建一个 mixin(那里也有几种方法,但现在没关系)。
class PipedriveSyncRelatedMixin():
pipedrivesyncs = GenericRelation('pipedrive.PipedriveSync')
我用这种方式
class User(PipedriveSyncRelatedMixin,AbstractUser):
pass
问题是,Mixin
当我手动指定 pipedrivesyncs 时,这不起作用。
pipedrivesyncs
手动指定的情况:
> u = User.objects.first()
> u.pipedrivesyncs.first()
> <PipedriveSync: PipedriveSync object (20)>
使用时的案例Mixin
> u = User.objects.first()
> u.pipedrivesyncs.first()
> AttributeError: 'GenericRelation' object has no attribute 'first'
区别在哪里,我可以Mixin
用于此目的吗?
解决方案
你的 mixin 必须是抽象的,继承应该来自 models.Model 我认为。
class PipedriveSyncRelatedMixin(models.Model):
pipedrivesyncs = GenericRelation('pipedrive.PipedriveSync')
class Meta:
abstract = True
推荐阅读
- swift - UItextfield 文本覆盖 Swift 中文本字段中的清除按钮
- python - 在创建数组数组时与 numpy 广播不一致的行为
- c# - 如何在 C# 中获取多维数组的最小数量?
- typescript - 基于另一种类型的复合类型
- powershell - 删除不包含/过滤 csv 文件的行
- python - 如何检查一个值是否在列表中的值之间?(Python)
- javascript - 在 Angular nx 项目中导入 JavaScript 模块
- html - 什么是浮动:左;网格中的等效项,因为不支持浮点数?
- python - 使用马拉地语创建 JSON 的 Python 代码给出不可读的 JSON
- authentication - Excel 加载项,通过 http 和 https 协议连接到 Web 服务