【发布时间】:2021-09-21 03:37:04
【问题描述】:
我有一个聊天应用程序,我正在尝试保存一条消息。我的消息模型有一个 OneToOneField,我这样做是因为我想在模板中显示带有消息的个人资料图像。 这是我的代码.....
Consumers.py - 这里是消息应该保存的地方
@sync_to_async
def save_message(self, username, room, message):
Message.objects.create(author = username, room = room, content = message)
Models.py - 这是我的 Message 和 Profile 模型
class Message(models.Model):
author = models.OneToOneField(User, on_delete=models.CASCADE)
room = models.CharField(max_length = 255)
content = models.TextField()
date_added = models.DateTimeField(auto_now_add = True)
class Meta:
ordering = ('date_added', )
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.png', upload_to='profile_pics')
def __str__(self):
return f'{self.user.username} Profile'
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.path)
这是我的模板的一部分,我想在其中显示消息
<main>
<div id="chat-text">
<div id=message>
{% for m in messages %}
<img id="imageid" src="{{ m.author.profile.image.url }}"> <b id="b2" style="color: rgb(252, 93, 93);"> {{m.author}}</b> <br>
</b> {{ m.content }} <br>
{% endfor %}
</div>
</div>
<div id="message-box">
<div class="input-container">
<input id="file-send" type="button">
<input id="input" placeholder="Type a message here..." type="text">
<input id="submit" type="submit" value="">
</div>
</div>
</main>
上面的代码不起作用,我得到一个错误 Cannot assign "'admin'": "Message.author" must be a "User" instance. 所以我的问题是,怎么能我使用用户实例创建此对象并将其保存在我的数据库中,以便我可以将其与个人资料图片一起显示?
【问题讨论】:
标签: python django web django-models chat