首页 > 解决方案 > Django模型自我不算作实例?

问题描述

我正在尝试解决一个ValueError: Cannot query "X": Must be "Y" instance.问题。问题是,我的X绝对似乎是一个Y例子。就我而言,Xself在一个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

这里发生了什么?

标签: pythondjango

解决方案


尝试更改return do_something(self)return do_something(self.user)


推荐阅读