일지
2023.06.13
scarlet0star
2023. 6. 13. 21:21
오늘은 websocket 관련 기능들을 모두 완성하였다. 문제점은 비동기처리라 그런지 모델이 정의되기 이전에 불러오는 경우
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
라며 계속 오류를 내뿜어 버리는 것이다. websocket 관련 기능들 중에서도 중간에 인스턴스를 찾거나 생성해야 하는 과정이 있었기에 어떻게 해야하나 고민이 많았는데, 지난번에 import를 최상위에서 하지 않는 경우가 있다고 알려준 것이 기억이 나서
@database_sync_to_async
def save_message(self,message_content):
from .models import Message
message = Message(user=self.user, chatroom=self.chat_room, content=message_content)
message.save()
return message
class Message(models.Model):
chatroom = models.ForeignKey('chat.Chatroom', on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
이런식으로 함수 내에서 import를 해보니 실제로 해결이 되었다. 또 User를 불러올때마다 django.contrib.auth 에서 get_user_model()를 사용했는데 이를 그냥 settings.py에서 지정한 문자열을 참조하도록 django.conf의 settings.AUTH_USER_MODEL로 다 변경해주었다. 다른 모델들도 app이 로드 되기전에 불러오지 않도록 하기위해서 모델을 문자열로 지정하였다.
이후로는 변수명 통일하기 였다. 내가 썼지만 언더바를 썼다 안썼다, 이름이 비슷하게 틀린다던가 문제가 많아서 이를 해결하는 데에 하루가 꼬박 지나갔다.
그럼에도 불구하고 실시간으로 됐을 때에는 얼마나 기뻤는지 모른다. 다만 스크린샷을 찍어보니 일부 값들이 제대로 안들어오는 것과 key값을 고쳐야할것 같다.