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'
发布于 2018-07-02 15:33:13
由于你使用a 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
。
注意:有可能没有
EmailActivation
实例与此相关联User
,在这种情况下,它会引发EmailActivation.DoesNotExist
错误,所以也许你想写try
-except
围绕这个逻辑。
注意我修复了一个拼写错误:它是(有两个s)
EmailActiva
t
iont
注意:关系的名称是小写的模型名称,所以不是
,但是obj.EmailActivation
obj.emailactivation
。
注意:通常最好直接引用
settings.AUTH_USER_MODEL
代替User
模型:如果稍后将用户模型更改为自定义模型,则不必重写所有这些模型。默认情况下settings.AUTH_USER_MODEL
是User
,但以后可以将其设置为不同的模式。
https://stackoverflow.com/questions/-100005548
复制相似问题