我正在尝试解决ValueError: Cannot query "X": Must be "Y" instance.
问题。问题是,我的X
肯定是一个Y
实例。在我的情况下,X
是self
模型中的UserAccount
。以下是一些代码段:
from other.thing import do_something
class UserAccount(...): # eventually subclasses from Django's user model
@property
def is_weekly_email_enabled(self):
# import pdb; pdb.set_trace() # Debugging entrypoint
return do_something(self)
class UserPreference(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL) # This points to UserAccount
name = models.CharField(max_length=255)
# In other/thing.py :
def do_something(user):
return UserPreference.objects.get(user=user, name="some_preference")
我在pdb
中设置了一个is_weekly_email_enabled()
断点来确认。
测试输出的实际异常:
ValueError: Cannot query "user1": Must be "UserAccount" instance.
(Pdb) self
<UserAccount: user1>
(Pdb) type(self)
<class 'accounts.models.UserAccount'>
(Pdb) isinstance(self, UserAccount)
True
这是怎么回事?
答案 0 :(得分:0)
尝试将return do_something(self)
更改为return do_something(self.user)
答案 1 :(得分:0)
事实证明,我使用模型和实用程序功能的方式没有错。我有一个循环依赖性(我的models.py
正在导入do_something
,带有do_something
的文件正在导入模型),但由于开发过程的原因,尚不清楚 >:
我在使用Django Shell和importlib
重新导入模块时,对它们进行了一些小调整。重新启动外壳程序并从头开始重试所有内容时,情况更加清晰了。我求助于将模型导入实用程序功能本身,而不是导入文件中。