Skip to main content
 首页 » 编程设计

python之Django查询关系

2025年05月04日25myhome

我的模型:

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_list 返回你想要的任何字段:

products = Product.objects.all().values('name',  
                                        'description', 
                                        'category__name', 
                                        'category__id',  
                                        'category__abbreviation') 
return JsonResponse(products) 

它可能不如序列化器方便,但我认为序列化器不擅长处理外键关系,因为如果您有更深层次的关系需要包含在结果中怎么办?