Django获取外键整个对象而不仅仅是id(主键)

时间:2015-04-21 19:15:07

标签: python django python-2.7 django-models django-queryset

我的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 个答案:

答案 0 :(得分:0)

我不认为这是可能的,而且最近才在Django ticket中解决(并拒绝)。如果依赖项是您的用例的选项,那么使用Django Rest Framework(或tastypie,我从未使用过)的序列化程序可能没问题。否则我想你会在代码中做到这一点。

以下是关于该问题的last comment的引用:

  

除非是序列化API的更基本的解决方案,   旨在使其通常可用于Web API我可扩展   没有看到推动序列化器范围的任何价值   现在站起来。现在它们的用例应该是夹具   加载和保存,没有别的。那里有更好的工具   通常可扩展的序列化方案(REST框架,   tastypie等。)

Django的select_related()有助于避免额外的SQL命中,所以至少会有一点性能提升。