Модель Django Self не считается экземпляром? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь решить проблему 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

Что здесь происходит?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Оказывается, нет ничего плохого в том, как я использую модели и функцию полезности.У меня была круговая зависимость (мой models.py импортировал do_something, а файл с do_something импортировал модели), но он не был понятен из-за процесса разработки :

Я использовал оболочку Django и importlib для повторного импорта модулей, когда я вносил в них небольшие изменения.При перезапуске оболочки и повторной попытке с нуля все стало намного понятнее.Я прибег к импорту моделей в самой утилите , а не в файле.

0 голосов
/ 20 сентября 2019

Попробуйте изменить return do_something(self) на return do_something(self.user)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...