Python Django查询关系
我的模型:Python Django查询关系,python,django,python-3.x,Python,Django,Python 3.x,我的模型: class Product(models.Model): name = models.CharField(max_length=125, blank=False, null=False) description = models.CharField(max_length=255, blank=True) abbreviation = models.CharField(max_length=15, blank=True) category = model
class Product(models.Model):
name = models.CharField(max_length=125, blank=False, null=False)
description = models.CharField(max_length=255, blank=True)
abbreviation = models.CharField(max_length=15, blank=True)
category = models.ForeignKey('inventory.Category',
on_delete=models.SET_NULL, null=True, blank=True)
metric = models.CharField(max_length=15, blank=True, null=True)
class Category(models.Model):
name = models.CharField(max_length=55, blank=False, null=False)
abbreviation = models.CharField(max_length=15, blank=True)
parent_category = models.ForeignKey('inventory.Category',
on_delete=models.SET_NULL, null=True, blank=True)
我要恢复所有产品:
products=Product.objects.all()
没关系。我成功地获得了所有的产品
但是我希望返回的产品带有ForeignKey属性作为引用模型的文本字段,而不是引用它的原始整数
所涉及的字段将是Category.name
目前我的回报是:
{model: product, pk:1, fields: {..., category: 1} }, { ....... } ...
我想要的是:
{model: product, pk:1, fields: {..., category: 'Categoria 1 '}
我需要使用相关的模型信息预先填充集合,因为我将返回一个JSON字符串作为服务调用方的结果
我尝试返回JSON:
products = Product.objects.all()
serialized_products = serializers.serialize('json', products)
return JsonResponse({'result': 'success', 'data':serialized_products}) #return all
我该怎么做?最简单、最优雅的表单…我唯一能想到的就是使用
values\u list
返回您想要的任何字段:
products = Product.objects.all().values('name',
'description',
'category__name',
'category__id',
'category__abbreviation')
return JsonResponse(products)
它可能比serializer不太方便,但我认为serializer不擅长处理外键关系,因为如果您需要在结果中包含更深层次的关系,该怎么办?是什么让您认为外键不是对象?@ShangWang我可能没有正确解释自己。在foreingKey对象中,我想返回Category.name,但是当我查询Product.objects.all()时,Category属性会给我一个对应于指定类别的整数。我将以JSON字符串的形式返回,所以我需要这个category.name allready填充..你需要编辑你的帖子,向我们展示你是如何尝试转换为JSON的。你的问题写得毫无意义,因为它基于一个错误的前提。如果您循环使用
Product.objects.all()
,则每个Product.category
将是一个category对象,而不是一个整数。我编辑了我的问题,我可能会更清楚。您的观点是正确的。我以为序列化程序会序列化我的“主”对象及其关系对象,但实际上不会。我会试试你的方法。@Pavarine我现在不在可以测试的地方,但如果你接着序列化会发生什么?@Two Bitalchest这是一个很好的尝试,但仍然不起作用。select_related将创建连接以立即从数据库中获取所有必要的数据,但序列化程序实际上不会“获取”返回的数据并构建相关对象。最后,我使用序列化程序的自然_键实现了这一点。。谢谢大家的帮助