2012-09-04 46 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