2015-01-23 6 views
7

Я подмешать и модель:Джанго GenericRelation в модели Mixin

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

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

Но Джанго не превратить 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> 

Как я могу использовать GenericRelation в Mixin?

+0

Может ли что-то подобное помочь? http://timmyomahony.com/blog/reversing-unique-generic-foreign-key-django/ –

ответ

5

Вы всегда можете унаследовать от Model и сделать его абстрактным, а не наследовать его от object. Метро Python все выяснит. Нравится так:

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

    class Meta: 
     abstract = True 

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

Я знаю. В вопросе я написал «Когда я помещал поле в саму модель или __abstract model__ - он отлично работает». Вопрос только в микшинге. – zymud

+1

Вы не можете использовать поля на обычных объектах так же, как они используются в моделях, особенно связанных. Все потому, что существует специальная логика, применяемая при создании класса модели, которая связана с прикрепленными к ней специальными способами, в зависимости от типа поля: https://github.com/django/django/blob/master/django/db/ model/base.py # L60 Вы можете попытаться что-то понять, но без каких-либо странных хаков это будет невозможно. Поэтому я бы даже не рекомендовал это делать. –

Смежные вопросы