如何在不在 Wagtail(django) 中进行额外查询的情况下访问外键数据
How to access ForeignKey data without making extra queries in Wagtail(django)
我的 app.models
中有以下两个 类,我正在使用 wagtail API 获取数据 json
class AuthorMeta(Page):
author=models.OneToOneField(User)
city = models.ForeignKey('Cities', related_name='related_author')
class Cities(Page):
name = models.CharField(max_length=30)
所以,当我尝试 /api/v1/pages/?type=dashboard.AuthorMeta&fields=title,city
时,它 returns 得到以下数据:
{
"meta": {
"total_count": 1
},
"pages": [
{
"id": 11,
"meta": {
"type": "dashboard.AuthorMeta",
"detail_url": "http://localhost:8000/api/v1/pages/11/"
},
"title": "Suneet Choudhary",
"city": {
"id": 10,
"meta": {
"type": "dashboard.Cities",
"detail_url": "http://localhost:8000/api/v1/pages/10/"
}
}
}
]
}
在城市字段中,它returns城市的id
和meta
。如何在不进行额外查询的情况下在此处的响应中获取城市名称? :/
我在 Documentation 中找不到任何解决方案。我错过了什么吗?
使用Django模型属性通过外键return:
class AuthorMeta(Page):
author=models.OneToOneField(User)
city = models.ForeignKey('Cities', related_name='related_author')
city_name = property(get_city_name)
def get_city_name(self):
return self.city.name
勾选 Term Property 以更好地理解概念
如果您在 Streamfield 中有外键,例如PageChooserBlock,您可以通过覆盖块的 get_api_representation
来自定义 api 响应,如提供的示例中所述 :
class CustomPageChooserBlock(blocks.PageChooserBlock):
""" Customize the api response. """
def get_api_representation(self, value, context=None):
""" Return the url path instead of the id. """
return value.url_path
我的 app.models
中有以下两个 类,我正在使用 wagtail API 获取数据 json
class AuthorMeta(Page):
author=models.OneToOneField(User)
city = models.ForeignKey('Cities', related_name='related_author')
class Cities(Page):
name = models.CharField(max_length=30)
所以,当我尝试 /api/v1/pages/?type=dashboard.AuthorMeta&fields=title,city
时,它 returns 得到以下数据:
{
"meta": {
"total_count": 1
},
"pages": [
{
"id": 11,
"meta": {
"type": "dashboard.AuthorMeta",
"detail_url": "http://localhost:8000/api/v1/pages/11/"
},
"title": "Suneet Choudhary",
"city": {
"id": 10,
"meta": {
"type": "dashboard.Cities",
"detail_url": "http://localhost:8000/api/v1/pages/10/"
}
}
}
]
}
在城市字段中,它returns城市的id
和meta
。如何在不进行额外查询的情况下在此处的响应中获取城市名称? :/
我在 Documentation 中找不到任何解决方案。我错过了什么吗?
使用Django模型属性通过外键return:
class AuthorMeta(Page):
author=models.OneToOneField(User)
city = models.ForeignKey('Cities', related_name='related_author')
city_name = property(get_city_name)
def get_city_name(self):
return self.city.name
勾选 Term Property 以更好地理解概念
如果您在 Streamfield 中有外键,例如PageChooserBlock,您可以通过覆盖块的 get_api_representation
来自定义 api 响应,如提供的示例中所述
class CustomPageChooserBlock(blocks.PageChooserBlock):
""" Customize the api response. """
def get_api_representation(self, value, context=None):
""" Return the url path instead of the id. """
return value.url_path