Django rest-api - attributeerror: объект 'str' не имеет атрибута '_meta'
Я получаю следующую ошибку при запуске manage.py в моем Django rest-api.
attributeerror: объект 'str' не имеет атрибута '_meta'
Отслеживание показывает следующее :
'' Traceback (последний последний вызов): Файл "/home/myproject/myproject-api/manage.py", строка 25, in execute_from_command_line(sys.argv)
File "/home/myEnv/lib/python3.9/site-packages/django/core/management/init.py", line 419, in execute_from_command_line utility.execute()
File "/home/myEnv/lib/python3.9/site-packages/django/core/management/init.py", line 395, in execute django.setup()
File "/home/myEnv/lib/python3.9/site-packages/django/init.py", line 24, in setup apps.populate(settings.INSTALLED_APPS)
File "/home/myEnv/lib/python3.9/site-packages/django/apps/registry.py", line 122, in populate app_config.ready()
<Файл "/home/myEnv/lib/python3.9/site-packages/funcy/flow.py", строка 231, in wrapper return func(*args, **kwargs)
File "/home/myEnv/lib/python3.9/site-packages/cacheops/query.py", line 578, in install_cacheops opts = rel.through._meta AttributeError: объект 'str' не имеет атрибута '_meta'
''
Проблема заключалась в следующем. Мне пришлось установить
pip install django-cacheops==0.9.3
Это должно быть полезно всем, кто столкнулся с точно такой же ошибкой.
Ошибка, которую вы получаете от cacheops, похоже, связана с тем, что вы используете отношения "многие ко многим" с моделью through
, где вы указываете модель through
, передавая строку с ее именем вместо самого класса, потому что класс определен только ниже. Хотя это совершенно обычная практика, cacheops, похоже, требует, чтобы вы делали это по-другому:
А именно, попробуйте сослаться на вашу модель through
, передав класс вместо строки с именем класса. Для этого вам нужно немного изменить порядок кода, поместив определение класса вашей through
модели первым, что, конечно же, требует передачи строк вместо классов в ForeignKey
. Например, сделайте это следующим образом:
class PostCategory(models.Model):
post = models.ForeignKey('Post')
category = models.ForeignKey('Category')
class Post(models.Model):
pass
class Category(models.Model):
posts = models.ManyToManyField(Post, through=PostCategory, related_name='categories')