【发布时间】:2021-11-22 03:33:44
【问题描述】:
我一直在寻找答案,但一无所获。这是这种情况: 我有 3 个这样定义的模型:
class State(models.Model):
name = models.CharField(max_length=150, null=False)
code = models.CharField(max_length=5, null=False)
class City(models.Model):
name = models.CharField(max_length=150, null=False)
code = models.CharField(max_length=7, null=False)
state = models.ForeignKey(State, related_name='cities', on_delete=models.RESTRICT)
class Home(models.Model):
code = models.CharField(max_length=25, null=False
city = models.ForeignKey(City, related_name='homes', on_delete=models.RESTRICT)
人们对家的需求是这样的
[
{
"code": "10011",
"city": "Municipio 1",
"state": "Departamento 1"
},
{
"code": "10012",
"city": "Municipio 1",
"state": "Departamento 1"
}
]
我能够使用序列化程序创建该响应:
class HomeSerializer(serializers.ModelSerializer):
city = SlugRelatedField(slug_field='name', queryset=City.objects.all())
state = SerializerMethodField()
class Meta:
model = Home
fields = ['code', 'city', 'state']
def get_state(self, obj):
return obj.city.state.nombre
但我不确定这是否是正确的方法,home 是一个会增长很多的表(可能有 1M+ 行),我认为这个解决方案会多次访问数据库.现在我知道我可以添加过滤和分页,但我担心这个解决方案的性能。我也试过depth = 2,但他们讨厌它。
我一直在搜索文档和示例(非常好),只需要 1 个嵌套关系,所以我真的迷路了。谢谢。
【问题讨论】:
标签: python django django-rest-framework django-serializer