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 - 夹具中的外键

在 Django 中从外键设置会话变量:需要字段名而不是主键

Django模型基于外键自动递增主键

django模型中, 外键字段使用to_filed属性 指定到所关联主表的某个字段

Django 啥时候查找外键的主键?

如何在DJANGO里,向有外键的DB里插入数据