Как получить названия компаний в функции фильтра товаров в Django? - PullRequest
0 голосов
/ 10 февраля 2019

Я хотел бы получить 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"}]}

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Вот что решило мою проблему:

product_names = Product.objects.filter(name__startswith=request.GET.get('query'))
.values('name', 'company__name'))
0 голосов
/ 10 февраля 2019

Если вы хотите отобразить 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')))
0 голосов
/ 10 февраля 2019

Взгляните на сериализаторы здесь: https://www.django -rest-framework.org / api-guide / serializers /

Сериализаторы позволяют указать формат, из которого представляются данныеваша модель, которая звучит как то, что вы хотите достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...