代码之家  ›  专栏  ›  技术社区  ›  Milano

Django模型MIXIN不像预期的那样工作

  •  0
  • Milano  · 技术社区  · 5 年前

    PipedriveSync GenericForeignKey 所以任何模特都可以 对象相关。

    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

    具体情况 管道驱动同步 手动:

    > u = User.objects.first()
    > u.pipedrivesyncs.first()
    > <PipedriveSync: PipedriveSync object (20)>
    

    混合蛋白

    > u = User.objects.first()
    > u.pipedrivesyncs.first()
    > AttributeError: 'GenericRelation' object has no attribute 'first'
    

    混合蛋白

    0 回复  |  直到 5 年前
        1
  •  1
  •   Sigdev    5 年前

    你的混血必须是抽象的,遗传应该来自模型。

    class PipedriveSyncRelatedMixin(models.Model):
        pipedrivesyncs = GenericRelation('pipedrive.PipedriveSync')
    
        class Meta:
            abstract = True
    
    推荐文章