Python 有没有办法在Django中序列化多个对象?
在Django项目中,我想实现一个简单的聊天框 版本 Django版本3.0.8 型号.pyPython 有没有办法在Django中序列化多个对象?,python,json,django,Python,Json,Django,在Django项目中,我想实现一个简单的聊天框 版本 Django版本3.0.8 型号.py class DirectMessageClass(models.Model): sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='from_this') receiver = models.ForeignKey(User, on_delete=mo
class DirectMessageClass(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='from_this')
receiver = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='to_this')
timestamp = models.DateTimeField(auto_now=True)
content = models.CharField(max_length=200)
read = models.BooleanField(default=False)
def serialize(self):
return {
"id": self.id,
"sender": self.sender.username,
"sendername":self.sender.profile.firstname,
"senderimage":self.sender.profile.image.url,
"receiver": self.receiver.username,
"content": self.content,
"timestamp":self.timestamp.strftime("%m/%d/%Y, %H:%M:%S"), # to format date
"read":self.read,
}
def loadbox(request):
user = request.user
# Return messages in reverse chronologial order
messages = DirectMessageClass.objects.filter(receiver=user).order_by("-timestamp").all()
return JsonResponse([message.serialize() for message in messages], safe=False)
def loadbox(request):
user = request.user
# Return messages in reverse chronologial order
messages = DirectMessageClass.objects.filter(receiver=user).order_by("-timestamp").all()
# return replies sent by the current user
replies = DirectMessageClass.objects.filter(sender=user).order_by("-timestamp").all()
return JsonResponse([message.serialize() for message in messages], safe=False)
视图.py
class DirectMessageClass(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='from_this')
receiver = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='to_this')
timestamp = models.DateTimeField(auto_now=True)
content = models.CharField(max_length=200)
read = models.BooleanField(default=False)
def serialize(self):
return {
"id": self.id,
"sender": self.sender.username,
"sendername":self.sender.profile.firstname,
"senderimage":self.sender.profile.image.url,
"receiver": self.receiver.username,
"content": self.content,
"timestamp":self.timestamp.strftime("%m/%d/%Y, %H:%M:%S"), # to format date
"read":self.read,
}
def loadbox(request):
user = request.user
# Return messages in reverse chronologial order
messages = DirectMessageClass.objects.filter(receiver=user).order_by("-timestamp").all()
return JsonResponse([message.serialize() for message in messages], safe=False)
def loadbox(request):
user = request.user
# Return messages in reverse chronologial order
messages = DirectMessageClass.objects.filter(receiver=user).order_by("-timestamp").all()
# return replies sent by the current user
replies = DirectMessageClass.objects.filter(sender=user).order_by("-timestamp").all()
return JsonResponse([message.serialize() for message in messages], safe=False)
我使用此方法成功地获取消息并将其转换为/loadbox路径中的JSON对象。稍后,我获取这些数据以显示消息,它就可以工作了
我的/loadbox路径示例
[{"id": 1, "sender": "ekvatorcizgisi", "sendername": "Asli",
"receiver": "bilge", "content": "hi", "timestamp": "09/02/2020, 08:22:26", "read": true}]
但是,因为我希望它显示为对话框。我还需要在这个JSON对象中添加回复消息
在views.py中我尝试
class DirectMessageClass(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='from_this')
receiver = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='to_this')
timestamp = models.DateTimeField(auto_now=True)
content = models.CharField(max_length=200)
read = models.BooleanField(default=False)
def serialize(self):
return {
"id": self.id,
"sender": self.sender.username,
"sendername":self.sender.profile.firstname,
"senderimage":self.sender.profile.image.url,
"receiver": self.receiver.username,
"content": self.content,
"timestamp":self.timestamp.strftime("%m/%d/%Y, %H:%M:%S"), # to format date
"read":self.read,
}
def loadbox(request):
user = request.user
# Return messages in reverse chronologial order
messages = DirectMessageClass.objects.filter(receiver=user).order_by("-timestamp").all()
return JsonResponse([message.serialize() for message in messages], safe=False)
def loadbox(request):
user = request.user
# Return messages in reverse chronologial order
messages = DirectMessageClass.objects.filter(receiver=user).order_by("-timestamp").all()
# return replies sent by the current user
replies = DirectMessageClass.objects.filter(sender=user).order_by("-timestamp").all()
return JsonResponse([message.serialize() for message in messages], safe=False)
我不知道如何在/loadbox路径中返回多个Json响应
return JsonResponse([message.serialize() for message in messages,reply.serialize() for reply in replies], safe=False)
显然给出了语法错误,(SyntaxError:invalid syntax)我也尝试了将其全部放在列表中,但无法使其工作
我的理想输出是
也许我会用另一种方式回复邮件来解决这个问题,但我想知道有没有更好的方法来解决这个问题?使用列表打包技术
def loadbox(request):
# rest of your code
return JsonResponse(
[
*[message.serialize() for message in messages],
*[reply.serialize() for reply in replies]
],
safe=False
)
“给出语法错误”对我来说似乎很好,您得到了什么错误?\return JsonResponse([message.serialize()用于消息中的消息,reply.serialize()用于答复中的答复),safe=False)^SyntaxError:无效语法