2013-08-08 3 views
0

У меня в настоящее время проблема с универсальными ключами. Я не знаю, как легко установить два GenericRelation указывая на той же модели, как показано ниже:Общие отношения, указывающие на ту же модель

Предположим, что у нас есть классы ниже:

class Pen(models.Model): 
    color = models.CharField(choices=COLORS) 

    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    item = generic.GenericForeignKey('content_type', 'object_id') 

class PencilCase(models.Model): 

    ballpoint_pens = generic.GenericRelation(Pen, related_name="ballpointpencil+") 
    fountain_pens = generic.GenericRelation(Pen, related_name="fountainpencil+") 

Проблема в том, что Django не может сделать разницу между шариковой ручкой и fountain_pen. Итак, как и ожидалось, каждое перо находится в списке ballpoint_pens и в fountain_pens.

У кого-то есть идея?

ответ

0

На самом деле, это очень легко сделать, я просто унаследовал класс Pen в двух подклассов и изменил параметр GenericRelation, простите за разногласий:

class BallPointPen(Pen): 
    pass 

class FountainPen(Pen): 
    pass 

class PencilCase(models.Model) 
    ballpoint_pens = generic.GenericRelation(BallPointPen, related_name="ballpointpencil+") 
    fountain_pens = generic.GenericRelation(FountainPen, related_name="fountainpencil+") 

И это работает как шарм.

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