2013-03-31 44 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

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

相關問題