【问题标题】:How can I retrieve all items associated with a model using a generic relation?如何使用通用关系检索与模型关联的所有项目?
【发布时间】:2013-03-21 13:20:42
【问题描述】:

我正在制作一个基于浏览器的小型游戏,同时尝试学习 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')

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

使用泛型关系是实现此目的的好方法吗?使用多对多关系来做这样的事情会更容易(甚至可能)吗?

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

感谢您抽出宝贵时间阅读和回答!

【问题讨论】:

  • 您的ItemBankUser 相关,但与它们本身无关。因此,有一些方法可以为用户获取所有银行和用户的所有项目。但如果您希望ItemBank 直接相关,您可以引入关系。例如。 ForeignKeyManyToManyField 取决于您希望如何关联它们。

标签: django django-models generic-relationship


【解决方案1】:

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

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

请注意,这只是 django 知道要查找什么的捷径。如果您删除您的Bank,您的Items 将不会受到影响。

【讨论】:

  • 是的,我只是想太多了。感谢您的回答,我让它工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 2019-03-03
相关资源
最近更新 更多