Django - 模型mixin不能按预期工作

问题描述 投票:1回答:1

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

问题是当我手动指定pipedrivesyncs时,这个Mixin不能正常工作。

手动指定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用于此目的吗?

python django django-models mixins django-2.1
1个回答
1
投票

你的mixin必须是抽象的,并且heritance应该来自models.Model我想。

class PipedriveSyncRelatedMixin(models.Model):
    pipedrivesyncs = GenericRelation('pipedrive.PipedriveSync')

    class Meta:
        abstract = True
© www.soinside.com 2019 - 2024. All rights reserved.