我的模特:
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
我该怎么做?最简单优雅的形式......
答案 0 :(得分:1)
我唯一能想到的是使用values_list
返回你想要的任何字段:
products = Product.objects.all().values('name',
'description',
'category__name',
'category__id',
'category__abbreviation')
return JsonResponse(products)
它可能比串行器更不方便,但我不认为序列化器擅长处理外部关键关系,因为如果你需要在结果中包含更深层的关系呢?