我正在使用Person
模型存储人员详细信息。
class Person(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
birthdate = models.DateField()
我也有模型PersonLogs
来存储人的活动日志。
class PersonLogs(models.Model):
person = models.ForeignKey(Person)
time = models.DateTimeField(auto_now_add=True)
我正在使用Django Serializer将Person对象作为响应返回JSON格式。
from django.core import serializers
data = serializers.serialize("json", Person.objects.all())
输出:
{
"model": "store.person",
"fields": {
"first_name": "Douglas",
"last_name": "Adams",
"birth_date": "1952-03-11",
}
}
现在我想将PersonLogs
返回到响应JSON。
预期产出:
{
"model": "store.person",
"fields": {
"first_name": "Douglas",
"last_name": "Adams",
"birth_date": "1952-03-11",
"personlogs": [['2015-06-09 15:42:58.861540'], ['2014-06-09 15:42:58.861540'], [2013-06-09 15:42:58.861540]]
}
}
我查看了官方文档,但我没有得到任何帮助。 link
答案 0 :(得分:3)
您似乎希望使用反向Person
关系序列化ForeignKey
。 Django的序列化程序不支持这一点。例如,正如@DanielRoseman的评论所指出的那样,你必须使用Django REST Framework。
但如果您可以妥协,以下解决方案将有效。
class PersonManager(models.Manager):
def get_by_natural_key(self, first_name, last_name, birthdate):
return self.get(first_name=first_name, last_name=last_name, birthdate=birthdate)
class Person(models.Model):
objects = PersonManager()
# other fields
...
现在,您不必序列化Person
,而是必须序列化PersonLogs
,这将输出:{/ p>
{
"pk": 1,
"model": "models.PersonLogs",
"fields": {
"time": "2015-06-09 15:42:58.861540",
"person": ["Douglas", "Adams", "1952-03-11"]
}
}
答案 1 :(得分:1)
您可以使用序列化模板。
将相关名称指定给PersonLogs
class PersonLogs(models.Model):
person = models.ForeignKey(Person,related_name='logs')
time = models.DateTimeField(auto_now_add=True)
创建序列化模板
logs_template = {
'fields': [':local'],
}
person_template = {
'fields' :[':local',':related'],
'related':{
'logs':logs_template,
}
}
使用以下功能对其进行序列化:
from preserialize.serialize import serialize
finaldata = serialize(data, **person_template)