2013-03-31 47 views
0

我在尝试学习Django时正在制作一个基于浏览器的小游戏。我有许多模型都可以有与他们相关的“项目”。如何使用通用关系检索与模型相关的所有项目?

这里是一个可以包含项目的车型之一:

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

我的项目类有一个通用的关系,所以它可以与任何我的模型需要包含的项目有关。它也有一个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字段,该字段可能包含项目,因为如果删除了该项目,会删除该模型。想法是这些物品是暂时的,但是具有物品的模型是永久性的。

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

+0

你的'Item'和'Bank'与'User'有关,但不是它们自己。因此有办法为用户提取所有银行,并为用户提取所有项目。但是如果你想让'Item'与'Bank'直接相关,你可以引入一个关系。例如。 'ForeignKey'或'ManyToManyField',这取决于你想如何关联它们。 –

回答

0

要访问您的ItemsBank容易,你可以在你的模型提供了捷径:

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

注意,这仅仅是Django的知道如何寻找一条捷径。如果你删除你的Bank你的Items不会受到影响。

+0

是的,我只是在想太多。感谢您的答案我让它工作得很好。 –

相关问题