如何使用通用关系检索与模型关联的所有项目?

时间:2013-03-31 06:27:23

标签: django django-models generic-relationship

我正在尝试学习Django时制作一个基于浏览器的小游戏。我有很多模型都可以与它们相关联的“项目”。

以下是可以包含项目的模型之一:

class Bank(models.Model):
    user = models.ForeignKey(User, unique=True)
    cash = models.IntegerField()

我的Item类具有通用关系,因此它可以与我需要包含项目的任何模型相关联。它还为用户提供ForeignKey,因为每个项目必须由用户拥有:

class Items(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100)
    description = models.TextField()
    itemType = models.CharField(max_length=50)
    stats = models.CommaSeparatedIntegerField(max_length=100)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

我的问题是如何获得当前与银行相关联的项目列表(或我可以拥有项目的任何其他模型)?

使用通用关系是一种很好的方法吗?使用ManyToMany关系来做这样的事情会更容易(甚至可能)吗?

我想避免在我的模型中使用实际的GenericRelation字段,如果我删除了该项,则可以删除模型。这个想法是项目是临时的,但有项目的模型是永久性的。

感谢您花时间阅读并回答!

1 个答案:

答案 0 :(得分:0)

要轻松地从Items访问Bank,您可以在模型中提供快捷方式:

class Bank(models.Model):
    ...
    items = generic.GenericRelation(Item)

请注意,这只是django知道要查找内容的快捷方式。如果您删除了Bank,则Items将不会受到影响。