django - Django:AttributeError:“NoneType”对象没有属性“用户名”
问题描述
我正在尝试创建一个聊天应用程序并遇到此错误。尽管我以超级用户身份登录,但我收到此错误。
我的模型.py
class Message(models.Model):
author = models.ForeignKey(User, null=True, related_name='author_messages', on_delete=models.CASCADE)
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.author.username
def last_10_messages():
return Message.objects.order_by('-timestamp').all()[:10]
我尝试访问它的地方:
for message in messages:
print("message printing")
result.append(self.message_to_json(message))
然后
def message_to_json(self, message):
print("message.id=",message.id)
print(message.author.username)
return {
'id': message.id,
'author': message.author.username,
'content': message.content,
'timestamp': str(message.timestamp)
}
当我打印对象的长度时,我注意到它说 2..idk 为什么我还没有添加任何消息。当循环进行两次时,我注意到第一次打印了用户名,但在第二次循环中引发了错误(尽管我知道为什么它会循环,因为我什至还没有要加载的消息) 就像这里
该错误似乎也出现在我的模型类的返回函数中,如此处
我读过其他帖子,但他们的错误是不同的......如果 sum1 cud 提供帮助将非常感激!
或者我如何以正确的方式定义和访问作者变量
解决方案
如果您允许author
不设置,那么您需要在尝试使用它之前确保它已设置。
像这样有点防守;
class Message(models.Model):
author = models.ForeignKey(User, null=True, related_name='author_messages', on_delete=models.CASCADE)
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
if not self.author:
return "Anonymous"
return self.author.username
def last_10_messages():
return Message.objects.order_by('-timestamp').all()[:10]
def message_to_json(self, message):
if message.author:
author = message.author.username
else:
author = "Anonymous"
return {
'id': message.id,
'author': author,
'content': message.content,
'timestamp': str(message.timestamp)
}
推荐阅读
- machine-learning - 我必须使用 svc 将用户语句分为 30 个类别..那么应该怎么做
- android - 对话框内的 RecyclerView 与对话框的其他内容重叠
- sql - 在 Rails 中根据条件获取关联对象计数
- amazon-ec2 - 如何将所有流量路由到我的 EC2 的 IP 地址到特定端口?
- unity3d - 从 Unity UWP 打开可执行 jar
- postgresql - 如何在插入语句之前在列上调用解码函数?
- php - Laravel 没有手册包含吗?
- sql - sql查询并排
- accessibility - G158 wcag的测试程序是什么意思?
- windows-installer - InstallShield)在控制面板中单击删除按钮时触发维护模式 - 添加或删除程序