模型 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):
...
我有 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):
...