gpt4 book ai didi

具有自定义字段表示的 json django 模型

转载 作者:行者123 更新时间:2023-12-01 06:32:03 25 4
gpt4 key购买 nike

我有以下模型:

class Messages(models.Model):
userid = models.ForeignKey(User)
time = models.TimeField(default=datetime.datetime.now)
content = models.CharField(max_length=255)
id = models.AutoField(primary_key=True)

我想用自定义表示形式对这个模型进行 json 处理,以便在 javascript 中传递它。我通过遍历 QuerySet 使用了以下代码

messages = Messages.objects.all()
passed_messages = []
for singleMess in messages:
passed_messages.append(get_message(singleMess))
response = json.dumps(passed_messages)

def get_message(message):
return {
'user': User.objects.get_by_natural_key(message.userid).username,
'content': message.content,
'hour': message.time.hour,
'minute': message.time.minute,
'id': message.id
}

但这部分看起来很难看。有没有办法用更好的东西代替它。我可以使用以下内容

__repr__ in models.py 
django.core.serializers
django.forms.models.model_to_dict
Messages.objects.all().values()

只是不知道怎么遇到。例如

  • json.dumps 需要一个纯 Python 字典列表,但是 __repr__ 返回 QuerySet 我不知道如何处理。
  • 如果我使用 model_to_dictserializerslist(messages.values()) 我不能加入用户的字段用户名而不是用户身份。

最佳答案

我向我的模型类添加了属性

class Messages(models.Model):
userid = models.ForeignKey(User)
time = models.TimeField(default=datetime.datetime.now)
content = models.CharField(max_length=255)
id = models.AutoField(primary_key=True)

@property
def json(self):
return {
'user': User.objects.get_by_natural_key(self.userid).username,
'content': self.content,
'time': self.time.strftime("%H:%M:%S"),
'id': self.id
}

并使用推导式:

import json
messages = Messages.objects.all()
json.dumps([message.json for message in messages])

关于具有自定义字段表示的 json django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27677102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com