我有以下型号:
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()
我只是不知道如何碰到。 例如
答案 0 :(得分:2)
我将属性添加到我的模型类
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])