Python 我可以使用OneToOneField的反向关系吗
我可以做以下代码吗Python 我可以使用OneToOneField的反向关系吗,python,django,Python,Django,我可以做以下代码吗 class EmailActivaion(models.Model): user = models.OneToOneField(User,on_delete=models.CASCADE) 因为我得到了以下错误: qs=User.objects.filter(email='bla@bla.com') obj=qs.first() em = obj.EmailActivaion_set.all() 由于您使用的是OneToOneField,这意味着目标模型(此处为U
class EmailActivaion(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
因为我得到了以下错误:
qs=User.objects.filter(email='bla@bla.com')
obj=qs.first()
em = obj.EmailActivaion_set.all()
由于您使用的是
OneToOneField
,这意味着目标模型(此处为User
)最多有一个EmailActivation
对象附加到它
因此,反向关系不是somemodel\u set
,而是简单的somemodel
所以你应该写:
AttributeError: 'User' object has no attribute 'EmailActivaion_set'
#获取单个EmailActivation实例,
#或引发EmailActivation.DoesNotExist错误(如果不存在)
em=目标电子邮件激活
这将直接获取与User
实例obj
相关的对象
注意:可能没有任何电子邮件激活
实例与此用户
相关联,在这种情况下,它将引发电子邮件激活。DoesNotExist
错误,因此您可能希望编写try
-,除了与此相关的逻辑
注意我修复了一个拼写错误:它是EmailActivation
(带有两个t
s)
注意:关系的名称是模型的名称,小写,因此不是obj.EmailActivation
,而是obj.EmailActivation
注意:通常最好参考设置。验证用户模型
而不是直接向用户
模型:如果以后将用户模型更改为自定义模型,则不必重写所有这些模型。默认情况下,settings.AUTH\u USER\u MODEL
是USER
,但您可以稍后将其设置为其他模型
非常感谢威廉的快速和全面的回复
# fetches the single EmailActivation instance,
# or raises an EmailActivation.DoesNotExist error (in case no exists)
em = obj.emailactivation