在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
吗?
答案 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