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

标签 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}

想要尝试在不对结果集应用额外循环的情况下执行此操作。

有没有办法做到同样的事情

最佳答案

我认为这是不可能的,它已在 Django ticket 中得到解决(并被拒绝)。就在最近。如果依赖项是您的用例的一个选项,那么使用 Django Rest Framework(或我从未使用过的 tatypie)中的序列化器可能没问题。否则我想你必须用代码来做到这一点。

这里引用 last comment关于这个问题:

Unless theres a more fundamental addressing of the serialization API, aimed at making it generally usable and extendable for Web APIs I don't see any value in pushing the scope of the serializers as they now stand. Right now the use case for them should be for fixture loading and saving and nothing else. There are better tools out there for generally extendable serialization schemes (REST framework, tastypie, etc).

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

关于python - Django 获取外键整个对象而不仅仅是 id(主键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29781169/

相关文章:

python - 如何使用属性获取lxml中所有元素的路径

python - 无法从下拉菜单Python Selenium中选择一个选项

python - Django Serializer 仅为父类对象返回 JSON 并保留子对象相同?

django - 将字段列表传递给 QuerySet.values()

python - 将字符串替换字典应用于字符串列表

python - Django 忽略 select_lated,发出更多请求来获取相关对象

python - 通过 python 扩展/包装器传递 float 组指针 – SndObj-library

python - Autobahn Wamp Protocol如何获取客户端IP地址?

python-2.7 - PySpark 使用统计信息写入 Parquet 二进制列(signed-min-max.enabled)

Python If 语句使用 'and' 和 'in'