Django获取外键整个对象而不仅仅是id(主键)
Posted
技术标签:
【中文标题】Django获取外键整个对象而不仅仅是id(主键)【英文标题】:Django Get Foreign key entire objects rather than just id(primary key) 【发布时间】:2015-06-29 03:26:10 【问题描述】:我的 Django 项目中有以下模型。
class State(models.Model):
state_name = models.CharField(max_length=30, unique=True)
state_code = models.CharField(max_length=30, unique=True)
class District(models.Model):
district_name = models.CharField(max_length=50)
district_code = models.CharField(max_length=30)
state_obj = models.ForeignKey(State)
我想与 state_obj 一起填充地区列表并将其发送到前端。 我正在使用序列化并尝试
serializers.serialize("json", District.objects.all())
并得到以下格式的结果
"fields": "state_obj": 23, "district_name": "NANDURBAR", "district_code": "NANDURBAR", "model": "adaxial_core.district", "pk": 665
在 django 中是否有可能获取 state_obj 整个对象而不是 id。
我期待的输出是这样的。
"fields": "state_obj": id:1,state_name:'X',state_code:'Y', "district_name": "NANDURBAR", "district_code": "NANDURBAR", "model": "adaxial_core.district", "pk": 665
想要尝试在结果集上不应用额外循环的情况下执行此操作。
有没有办法做同样的事情
【问题讨论】:
【参考方案1】:我认为这是不可能的,最近才在Django ticket 中解决(并拒绝)了它。如果依赖项是您的用例的一个选项,那么使用 Django Rest Framework 中的序列化程序(或我从未使用过的美味派)可能没问题。否则,我认为您将在代码中执行此操作。
以下是last comment 关于该问题的引述:
除非序列化 API 有更基本的寻址方式, 旨在使其普遍对 Web API 可用和可扩展 I 在推动序列化程序的范围方面看不到任何价值,因为它们 现在站起来。现在他们的用例应该是夹具 加载和保存,仅此而已。那里有更好的工具 对于一般可扩展的序列化方案(REST 框架, 美味的馅饼等)。
Django 的select_related()
有助于避免额外的 SQL 命中,所以至少这会稍微提高性能。
【讨论】:
以上是关于Django获取外键整个对象而不仅仅是id(主键)的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中从外键设置会话变量:需要字段名而不是主键