【发布时间】:2019-07-04 03:12:35
【问题描述】:
我想获得一个 JSON 字典,其中包含所有产品名称,包括相应的公司名称(请参阅“我想要的输出”部分)。我的搜索/过滤功能将数字作为公司返回,这是错误的(请参阅“我拥有的输出”部分)。谢谢!
产品型号
class Product(models.Model):
name = models.CharField(max_length=150)
company = models.ForeignKey(Company, on_delete=models.CASCADE)
公司模式
class Company(models.Model):
name = models.CharField(max_length=150)
搜索/过滤功能
product_names = Product.objects.filter(name__startswith=request.GET.get('query')).values('name', 'company')
我有输出
{"products": [{"name": "bla 2", "company": 3}, {"name": "bla 1", "company": 10}]}
我想要的输出
{"products": [{"name": "bla 2", "company": "apple"}, {"name": "bla 1", "company": "samsung"}]}
【问题讨论】:
-
将
name中的Company模型设置为主键,如下所示:name = models.CharField(max_length=150, primary_key=True) -
我认为将名称设置为主键并不明智,因为产品/公司可以具有相同的名称。
-
我想保留默认id为pk。
-
然后尝试
from django.core import serializers然后print(serializers.serialize("json", [Product.objects.filter(name__startswith=request.GET.get('query'))])) -
我找到了我的问题的答案!这很简单:
product_names = Product.objects.filter(name__startswith=request.GET.get('query')).values('name', 'company__name'))
标签: python django filter model