Django Model class doesn't declare без явной причины
Создаю чат по видео с ютуба с вебсокетами и все бы ничего, но при написании самого класса с вебсокетом и импорте модели для соединения, вылезает ошибка о регистрации этой модели. Уже все прошерстил, INSTALLED_APPS проверил, в модели указывать приложение в Meta тоже пробовал, но ничего не помогает.
Проблема именно в самом импорте модели именно в этом файле, т.к в остальных все работало хорошо. Вот логи:
Starting ASGI/Daphne version 4.1.2 development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Exception in thread django-main-thread:
Traceback (most recent call last):
File "C:\Python313\Lib\threading.py", line 1041, in _bootstrap_inner
self.run()
~~~~~~~~^^
File "C:\Python313\Lib\threading.py", line 992, in run
self._target(*self._args, **self._kwargs)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "C:\Users\mixa2\Desktop\Web\env\Lib\site-packages\daphne\management\commands\runserver.py", line 153, in get_application
return ASGIStaticFilesHandler(get_default_application())
~~~~~~~~~~~~~~~~~~~~~~~^^
File "C:\Users\mixa2\Desktop\Web\env\Lib\site-packages\daphne\management\commands\runserver.py", line 29, in get_default_application
module = importlib.import_module(path)
File "C:\Python313\Lib\importlib\__init__.py", line 88, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 1026, in exec_module
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "C:\Users\mixa2\Desktop\Web\webProject\webProject\asgi.py", line 21, in <module>
from apps.chat import routing
File "C:\Users\mixa2\Desktop\Web\webProject\apps\chat\routing.py", line 2, in <module>
from .consumers import ChatroomConsumers
File "C:\Users\mixa2\Desktop\Web\webProject\apps\chat\consumers.py", line 5, in <module>
from .models import GroupMessage, ChatGroup
File "C:\Users\mixa2\Desktop\Web\webProject\apps\chat\models.py", line 5, in <module>
class ChatGroup(models.Model):
...<3 lines>...
return self.group_name
File "C:\Users\mixa2\Desktop\Web\env\Lib\site-packages\django\db\models\base.py", line 134, in __new__
raise RuntimeError(
...<3 lines>...
)
RuntimeError: Model class apps.chat.models.ChatGroup doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Вот сам проблемный файл:
import json
from channels.generic.websocket import WebsocketConsumer
from django.shortcuts import get_object_or_404
from .models import GroupMessage, ChatGroup
class ChatroomConsumers(WebsocketConsumer):
def connect(self):
self.user = self.scope['user']
self.chatroom_name = self.scope['url_route']['kwargs']['chatroom_name']
self.chatroom = get_object_or_404(ChatGroup, group_name=self.chatroom_name)
self.accept()
def receive(self, text_data):
text_data_json = json.loads(text_data)
body = text_data_json['body']
message = GroupMessage.objects.create(
body = body,
author = self.user,
group = self.chatroom
)
Ну и сама модель:
class ChatGroup(models.Model):
group_name = models.CharField(max_length=128, unique=True)
def __str__(self):
return self.group_name
Ну и подключение asgi из setting
ASGI_APPLICATION = 'webProject.asgi.application'
INSTALLED_APPS:
INSTALLED_APPS = [
"daphne",
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'crispy_forms',
"crispy_bootstrap5",
'debug_toolbar',
"django_htmx",
'mainMenu.apps.MainMenuConfig',
'novella.apps.NovellaConfig',
'authenticate.apps.AuthenticateConfig',
'quiz.apps.QuizConfig',
'chat.apps.ChatConfig'
]
Буду очень признателен за наводку)
Все-таки нагуглил решение проблемы. Она заключалась в том, что следовало придерживаться документации по Django и не создавать приложения в отдельной директории, а хранить их на одном уровне с базовой, так сказать
Вот тут подробнее: https://forum.djangoproject.com/t/problem-importing-model-into-consumers-py/34296/4