gpt4 book ai didi

python - Django一对一反向关系DoesNotExist

转载 作者:太空宇宙 更新时间:2023-11-03 15:20:00 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,我的一对一关系似乎没有反向工作。用代码解释最简单。

我扩展了默认的 Django 用户以添加时区,如下所示:

#This model holds custom user fields
class TaskUser(models.Model):
user = models.OneToOneField(User, related_name="task_user")
timezone = models.CharField(max_length=50, default="UTC")

我使用 South 迁移,到目前为止没有问题。它在我的管理员中以内联方式显示,同样没有问题。我还使用了 syncdb,因为我之前没有使用过 South with User,它可以同步其他所有内容,没问题。

因此,根据文档,我现在应该在 User 对象上有一个字段 task_user,它引用了 TaskUser 对象。

如果我进入 Django shell,情况就不是这样了。 (见[6])

In [1]: from django.contrib.auth.models import User

In [2]: current_user = User.objects.get(pk=1)

In [3]: current_user?
Type: User
String Form:callum
File: /usr/local/lib/python2.7/dist-packages/django/contrib/auth/models.py
Docstring:
Users within the Django authentication system are represented by this
model.

Username, password and email are required. Other fields are optional.

In [4]: for field in current_user._meta.fields:
print field.name
...:
id
password
last_login
is_superuser
username
first_name
last_name
email
is_staff
is_active
date_joined


In [5]: dir(current_user)
Out[5]:
['DoesNotExist',
'Meta',
'MultipleObjectsReturned',
'REQUIRED_FIELDS',
'USERNAME_FIELD',
#I have removed many more field here
'task_user',
#And a few here
'validate_unique']

In [6]: current_user.task_user
---------------------------------------------------------------------------
DoesNotExist Traceback (most recent call last)
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in <module>()
----> 1 current_user.task_user

/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.pyc in __get__(self, instance, instance_type)
277 setattr(instance, self.cache_name, rel_obj)
278 if rel_obj is None:
--> 279 raise self.related.model.DoesNotExist
280 else:
281 return rel_obj

DoesNotExist:

我对这个结果有点困惑 - 对象似乎在某处有这个 task_data 字段,但不是关系?我不太确定如何访问它并避免此错误。

提前感谢任何人可以提供的帮助。

最佳答案

当您指定 related_name 时,您并没有向 User 模型添加字段。相反,创建了某种描述符,因此它在 Userfields 属性中不可见。以这种方式在 TaskUser 模型中定义字段意味着不可能拥有没有关联用户的 TaskUser 实例,但可以拥有 User 实例没有关联的 TaksUser 实例(对于 ForeignKey 关系也是如此),因此您需要确保实际创建了 TaskUser 实例;它不会自动完成。

关于python - Django一对一反向关系DoesNotExist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com