Django-模型混合无法正常工作

时间:2019-03-19 13:55:58

标签: python django django-models mixins django-2.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吗?

1 个答案:

答案 0 :(得分:1)

Your mixin has to be abstract and heritance should come from models.Model i think.

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

    class Meta:
        abstract = True