Django频道实时聊天:AttributeError:'Message'对象没有属性'as_dict'

时间:2018-02-26 19:51:38

标签: python django websocket django-channels

我一直在关注本教程,在我的Django项目中实现实时聊天系统。到目前为止,它已经进展顺利,我已经解决了任何问题,但是这个问题让我很难过。

#h1_main {
  margin-top: 250px;
  text-align: center;
  color: #ffffff;
  font-size: 50px;
}

这个错误似乎只有在收到websocket数据时才出现,这就是为什么当我试图发送数据时它会被保存到数据库中。这意味着如果我在另一个浏览器上打开它或刷新页面,我就可以阅读这些消息。我还可以告诉我断开连接代码也能正常工作,因为在Django开发控制台中,它告诉我IP何时从websocket断开连接。

你可能会说我对此很陌生。这是我在consumers.py中的代码

2018-02-26 19:45:34,241 - ERROR - worker - Error processing message with consumer TestApp.consumers.ws_receive:
Traceback (most recent call last):
  File "/home/.virtualenvs/blog/lib/python3.5/site-packages/channels/worker.py", line 46, in run
consumer(message)
  File "/home/.virtualenvs/blog/lib/python3.5/site-packages/channels/sessions.py", line 57, in inner
return func(message, *args, **kwargs)
  File "/home/blog_dev/TutorsTalk/TestApp/consumers.py", line 23, in ws_receive
Group('chat-'+label).send({'text': json.dumps([m.as_dict()])})
AttributeError: 'Message' object has no attribute 'as_dict'

我尝试了一些我认为可能有效但却无济于事的事情。请告诉我是否应提供更多信息。

2 个答案:

答案 0 :(得分:0)

m 是模型的实例以下是将对象转换为dict的方法

 1. m.__dict__
    > Group('chat-'+label).send({'text': json.dumps(m.__dict__)})

 2. from django.forms.models import model_to_dict
    model_to_dict(m)
    > Group('chat-'+label).send({'text': json.dumps(model_to_dict(m))})

答案 1 :(得分:0)

您可以看到hereMessage类中没有定义as_dict方法。

如果您想获取消息内容,可以访问.content实例的Message属性以获取Message内容dict。 (这在Message类文档字符串中提到)

<强>修正

Group('chat-'+label).send({'text': json.dumps(m.content)})