gpt4 book ai didi

django - 如何让 Django-Piston 在序列化输出中包含相关的子对象?

转载 作者:行者123 更新时间:2023-12-04 00:45:45 24 4
gpt4 key购买 nike

我在这里拉我的头发,因为这对我不起作用,似乎应该如此。

我正在使用 Django-Piston 开发 API 并有 2 个模型,Building 和 Building Area。

BuildingArea 有一个到 Building 的外键,因为建筑物中有多个区域。 FK 的“related_name”属性是“areas”,因此我可以从给定的建筑物访问 BuildingAreas。

问题是它在 Admin 中看起来一切正常,但是当我点击/api/building.json 端点时,我得到的只是 Building 对象,而没有包含在 JSON 中的嵌套 BuildingArea 对象。

我原以为 Django-Piston 会默认遵循反向 FK 字段,还是我遗漏了什么?

handlers.py

class BuildingHandler(BaseHandler):

allowed_methods = ('GET',)
model = Building

def read(self, name=None):
return self.model.objects.all()

模型.py
class Building(models.Model):
address = models.CharField(max_length=255)

def __unicode__(self):
return self.address

class BuildingArea(models.Model):
display_name = models.CharField(max_length=30)
building = models.ForeignKey(Building, related_name='areas')

def __unicode__(self):
return self.display_name

最佳答案

好的,所以我在通过 Emitters.py 调试并注意它如何使用处理程序的“字段”属性来迭代模型字段后终于让它工作了。

这些是我的模型:

class Building(models.Model):
address = models.CharField(max_length=255)

def __unicode__(self):
return self.address

class BuildingArea(models.Model):
display_name = models.CharField(max_length=30)
building = models.ForeignKey(Building, related_name='areas')

def __unicode__(self):
return self.display_name

这就是我的 BuildingHandler 现在的样子:
class BuildingHandler(BaseHandler):

allowed_methods = ('GET',)
fields = ('address', ('areas', ('display_name',),),)
model = Building

def read(self, name=None):
return self.model.objects.all()

这里要注意的重要一点是 emmitters.py 仅当当前字段定义是集合或列表时才会激活某些代码路径。我忘记在用于定义字段的集合中添加尾随 ',',这导致 Piston 导致 Python 返回一个由字符串 'display_name' 中包含的字符组成的集合,而不是包含字符串 ' 的集合显示名称'。我希望这是有道理的,谷歌“Python 单组尾随逗号”了解更多信息。

希望这对其他人有帮助! :D

关于django - 如何让 Django-Piston 在序列化输出中包含相关的子对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305885/

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