Django 访问 OneToOneField

7 投票
1 回答
9019 浏览
提问于 2025-04-17 23:26

我创建了一个扩展了用户(User)的视图:

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

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

现在我想通过客户端(Client)对象来访问用户模型(User model)。可是我在 Python 的命令行里遇到了一个错误:

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

我知道这个问题和访问一个一对一字段(OneToOneField)有关,但我不太明白为什么。找到的解决方案大多是从用户模型的角度出发,而不是从我这个扩展的客户端的角度。

为了让事情更清楚一点。每当我访问用户(User)时,

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

它会显示扩展模型的属性,在这个例子中就是客户端的属性。我想知道如何反过来做,也就是通过客户端模型来访问,而不是通过用户模型。

1 个回答

5

我觉得你需要传递用户对象,而不是一个字符串。

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

希望这样能成功;)

撰写回答