2012-09-04 62 views
2

從我的模型中獲取對象時遇到了一些問題。我有這樣的事情:從基於ForeignKey對象的模型獲取對象

# Model 
class Subscription(models.Model): 
    identifier = models.CharField(max_length=10) 
    user = models.ForeignKey(User) 

class Subscriber(models.Model): 
    name = models.CharField(max_length=5) 

而現在我有Subscriber對象實例my_user,我想獲得相關訂閱。所以我想嘗試這樣的:

sub = Subscription.objects.get(user=my_user) 

但我在那之後得到例外。我也'試過:

sub = Subscription.objects.get(user.id=my_user.id) 

結果仍然是一樣的(例外)。

您有任何建議或鏈接到文檔,我如何從Subscription集合中獲取此對象?

+2

),如果有多個對象返回它會拋出一個異常。考慮使用.filter() 你遇到了什麼異常? – karthikr

+0

感謝karthir提供了一些提示。我試圖檢查我的數據庫,如果我真的只有一個相關對象,並且我發現訂閱實例,沒有分配任何子訂戶。這是我的錯。 – Grzegorz

+0

如果有多個對象的可能性,永遠不要使用try try catch。 – karthikr

回答

3

至少根據你上面提供的模型,我不知道爲什麼應該有一個關係。

訂閱者無論如何都與訂閱無關,特別是,模型的主ID可能不應相關(user.id = my_user.id),除非您明確地設計它。

而且,這樣的:如果有如果有某種關係,即Django知道關於

sub = Subscription.objects.get(user=my_user) 

纔會工作。

在我看來,你應該做這樣的事情:

class Subscription(models.Model): 
    subscriber= models.ForeignKey('Subscriber') 
    identifier = models.CharField(max_length=10) 


class Subscriber(models.Model): 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=5) #PS, if you ever save anything longer than 5 char's this will raise an exception. 

這將讓你做出這樣的查詢:

當您使用獲得(
my_user = Subscriber.obejects.get(something=someotherthing) 
sub = Subscription.objects.get(subscriber=my_user) 
+0

你是對的詹姆斯。在我的模型中應該放置用戶在我寫的用戶。此時一切正常。 – Grzegorz