模型 Mixin 中的 Django GenericRelation

Django GenericRelation in model Mixin

我有 mixin 和模型:

class Mixin(object):
    field = GenericRelation('ModelWithGR')

class MyModel(Mixin, models.Model):
   ...

但是django不会把GenericRelation字段变成GenericRelatedObjectManager:

>>> m = MyModel()
>>> m.field
<django.contrib.contenttypes.fields.GenericRelation>

当我将字段放入模型本身或抽象模型时 - 它工作正常:

class MyModel(Mixin, models.Model):
   field = GenericRelation('ModelWithGR')

>>> m = MyModel()
>>> m.field
<django.contrib.contenttypes.fields.GenericRelatedObjectManager at 0x3bf47d0>

如何在 mixin 中使用 GenericRelation

您始终可以从 Model 继承并使其抽象化,而不是从 object 继承。 Python 的 mro 会解决所有问题。 像这样:

class Mixin(models.Model):
    field = GenericRelation('ModelWithGR')

    class Meta:
        abstract = True

class MyModel(Mixin, models.Model):
    ...