【问题标题】:Django onetoone relationship with User not working with query与用户的 Django onetoone 关系不使用查询
【发布时间】:2019-01-26 22:12:49
【问题描述】:

我的模型是这样的

class Profile(models.Model):
    user = models.OneToOneField(User,default=None,null=True,on_delete=models.CASCADE)
    name = models.CharField(max_length=50,null=True)

我试图通过使用 shell 的模型但得到空查询。 我试过这个

>>> u1=User.objects.get(username='gautam')
>>>u1
<User: gautam> 
>>> Profile.objects.get(user=u1)
Traceback (most recent call last):
File "/usr/lib/python3.6/code.py", line 91, in runcode
exec(code, self.locals)
File "<console>", line 1, in <module>
File "/home/gautam/.local/lib/python3.6/site- 
packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/gautam/.local/lib/python3.6/site- 
packages/django/db/models/query.py", line 399, in get
self.model._meta.object_name
homes_login.models.DoesNotExist: Profile matching query does not 
exist.

我正在尝试获取该个人资料的用户。

【问题讨论】:

  • 这可能发生。请注意,OneToOneField 实际上不是意味着每个User 都有一个Profile,这意味着您构造了一个ForeignKey,带有unique=True 约束,这样两个Profile s 可以指向同一个User
  • 嘿,非常感谢您的帮助

标签: python django python-3.x django-models django-rest-framework


【解决方案1】:

根本没有创建此配置文件。设置OneToOne 关系并不能保证每个用户都存在该配置文件。为了克服这个问题,您应该简单地创建新的配置文件,如下所示:

>>> Profile.objects.create(user=u1)

要自动获取现有配置文件或创建新配置文件,您可以使用get_or_create 方法。

【讨论】:

  • 非常感谢@GwynBleidD 你真的解决了我的问题
猜你喜欢
  • 2013-01-10
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
相关资源
最近更新 更多