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'
答案 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
)
注意:关系的名称是模型的名称小写,所以不是
,而是{ {1}}。t
注意:通常最好参考
obj.EmailActivation
而不是直接参考obj.emailactivation
模型:如果以后要更改用户模型转换为自定义模型,则不必重写所有这些模型。默认情况下,settings.AUTH_USER_MODEL
是User
,但是您以后可以将其设置为其他模型。