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 无法区分圆珠笔和喷泉笔。因此,正如预期的那样,每支笔都在 ballpoint_pens 列表中,并且在钢笔列表中。

有人对此有想法吗?

4

1 回答 1

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+")

它就像一个魅力。

于 2013-08-08T22:53:36.043 回答