我可以与OneToOneField使用反向关系吗

时间:2018-07-01 16:03:43

标签: 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()

出现以下错误:

AttributeError: 'User' object has no attribute 'EmailActivaion_set'

1 个答案:

答案 0 :(得分:1)

由于您使用了OneToOneField,这意味着目标模型(此处为User)最多具有一个一个EmailActivation附加到它的对象。

因此,反向关系不是somemodel_set,而只是somemodel

所以您应该写:

# fetches the single EmailActivation instance,
# or raises an EmailActivation.DoesNotExist error (in case no exists)
em = obj.emailactivation

这将直接 获取与User实例obj相关的对象。

  

注意:可能 no EmailActivation实例与此User相关联,在这种情况下,它将引发一个{{1 }}错误,因此也许您想为此编写EmailActivation.DoesNotExist-try逻辑。

  

注意,我修复了一个拼写错误:它是except(有两个EmailActivation

  

注意:关系的名称是模型的名称小写,所以不是 t ,而是{ {1}}。

  

注意:通常最好参考 obj.EmailActivation 而不是直接参考obj.emailactivation模型:如果以后要更改用户模型转换为自定义模型,则不必重写所有这些模型。默认情况下,settings.AUTH_USER_MODELUser,但是您以后可以将其设置为其他模型。