【问题标题】:Django accessing OneToOneFieldDjango 访问 OneToOneField
【发布时间】:2014-04-30 01:13:13
【问题描述】:

制作了一个扩展用户的视图:

class Client(models.Model):
    user = models.OneToOneField(User, related_name='user')

    def __unicode__(self):
          return "%s" % (self.user)   

我目前正在尝试通过访问 Client 对象来访问 User 模型。目前我在 python shell 中遇到错误:

ValueError: invalid literal for int() with base 10:

我知道这与访问 OneToOneField 有关,但我不知道为什么。在我的例子中,我发现的所有解决方案都是从用户模型的角度而不是扩展客户端的角度来看的。

为了更清楚。每当我访问用户时。

>>> client1 = User.objects.get(username="client1")
>>> client1.user
>>> client1.user.attribute

它与扩展模型的属性相呼应,在本例中为客户端属性。我怎样才能以相反的方式实现这一目标。所以通过 Client 模型而不是 User 模型。

【问题讨论】:

标签: python django model


【解决方案1】:

我认为您需要传递用户对象而不是字符串。

client1 = User.objects.get(username="client_1") # this is the user object
client_obj = Client.objects.get(user=client1) # pass object NOT STRING

你也可以这样做:(假设给出了用户的 id)

client1 = Client_objects.get(user__id=1) # pass the user's id instead

我希望它有效;)

【讨论】:

  • 谢谢!如您所见,我刚刚在您回答之前编辑了我的问题。似乎是最好的解决方法!
  • 请注意,同样可以在单个查询中完成:Client.objects.get(user__username="client_1")。如果您知道您还想访问User 对象的数据,请使用.select_related('user')
猜你喜欢
  • 2011-10-04
  • 2016-01-17
  • 2023-03-13
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 2016-06-04
  • 2020-08-13
相关资源
最近更新 更多