Django频道实时聊天:AttributeError:“Message”对象没有“as-dict”属性

2024-06-16 13:44:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在遵循这个教程,在我的Django项目中实现一个实时聊天系统。我已经解决了很多问题。在

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'

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

你可能知道我对这件事很陌生。这是我的密码消费者.py在

^{pr2}$

我试过一些我认为可能有用的方法,但是没有用。请告诉我是否需要提供更多的信息。在


Tags: djangoinpymessagehomewsconsumerline
3条回答

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))})

我按照那个教程去做。将这些行粘贴到模型消息上。在

@property
def formatted_timestamp(self):
    return self.timestamp.strftime('%H:%M:%S')

def as_dict(self):
    return {'handle': self.handle, 'message': self.message, 'timestamp': self.formatted_timestamp}

它会起作用的

您可以看到hereMessage类中没有定义{}方法。在

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

修复

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

相关问题 更多 >