我有一个Django应用程序,它定义了一对多模型关系。模型如下所示:
from django.db import models
# Create your models here.
class StreamNetwork(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
class Stream(models.Model):
name = models.CharField(max_length=50)
custom_url = models.CharField(max_length=100, null=True)
network = models.ForeignKey(StreamNetwork)
score = models.SmallIntegerField()
def __unicode__(self):
return self.name
稍后,我想将所有流条目序列化为json。我是这样做的:
from django.core.serializers import serialize
string = serialize(format, Stream.objects.all())
预期结果将是数据库中一行的简单序列化json版本。相反,输出如下所示:
[
{
"pk" : 1,
"model" : "website.stream",
"fields" :
{
"network" : 2,
"score" : 53,
"name" : "DangerousDan1",
"custom_url" : null
}
},
...
另外,我想在输出中获得streamnetwork的名称,而不是id
。你知道吗
有没有Django方法可以自定义序列化输出的格式?你知道吗
谢谢你的回复
我使用django-piston作为我的restfulapi,并使用它的框架进行序列化,您可以配置要包含哪些字段、引用的对象,以及添加其他或重命名字段。你知道吗
Django pure的另一种机制是使用model\ to\ dict:
请记住,QuerySet不仅仅是一个简单的数据库查询,因此“预期结果”应该是它包含额外的信息。做你想做的事情的一个简单方法(我认为这是Django方法)是定义一个model manager,它只返回你想要的。比如:
然后将
objects = StreamManger()
放入流类中,您就可以作为Stream.objects.all\已序列化()另一种方法是将QuerySet子类化,这样它只返回您想要的信息,然后在QuerySet上使用serialize()方法,但我从未涉足过这一点,并假设它需要了解QuerySet如何在引擎盖下工作(它可能比我的解决方案效率略高,但由于关键是要序列化所有内容,并且您希望对每个条目进行外键查找以找到网络名称,因此我假设您不会处理大量数据)。你知道吗
编辑:关于您对Rob的解决方案的评论,请参阅documentationfor serialize()——您可以定义要序列化的字段,但我认为它不支持外键查找,您仍然可以获得QuerySet格式的字段(pk、model和fields)。你知道吗
相关问题 更多 >
编程相关推荐