如何在Django的产品过滤器函数中获取公司名称?

时间:2019-02-10 13:16:21

标签: python django filter model

我想得到一个JSON字典,其中包含所有产品名称,包括相应的公司名称(请参阅“我想要的输出”部分)。我的搜索/过滤器函数将数字作为公司返回,这是错误的(请参阅“我的输出”部分)。谢谢!

产品型号

import {MDCTextField} from '@material/textfield';
import {MDCNotchedOutline} from '@material/notched-outline'; 
const notch = new MDCNotchedOutline(document.querySelector('.mdc-notched-outline'));
const username = new MDCTextField(document.querySelector('.username'));

公司型号

@import "@material/textfield/mdc-text-field";
@import "@material/notched-outline/mdc-notched-outline";

搜索/过滤功能

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')

3 个答案:

答案 0 :(得分:1)

在此处查看序列化器:https://www.django-rest-framework.org/api-guide/serializers/

序列化器允许您指定从模型中呈现数据的格式,这听起来像您想要实现的。

答案 1 :(得分:1)

这是解决我的问题的方法:

product_names = Product.objects.filter(name__startswith=request.GET.get('query'))
.values('name', 'company__name'))

答案 2 :(得分:1)

如果您想在字典中显示company而不是company__name,则可以将F对象与annotate一起使用,如下所示:

from django.db.models import F

product_names = Product.objects.filter(name__startswith=request.GET.get('query'))
.values('name').annotate(company=F('company__name')))