Отправить JsonResponse со связанными объектами - PullRequest
0 голосов
/ 12 июля 2020

Я хочу отправить JsonResponse со связанными объектами. Вот моя игровая площадка.

Я делаю это как

def get_stocks(qty=9):
  return Stock.objects.values()[:9]

# Returning stocks
stocks = api_services.get_stocks()
return JsonResponse(list(stocks), safe=False)

Мои модели похожи на

class Sector(models.Model):
  name = models.CharField(max_length=200, null=True, blank=True)
  original_name = models.CharField(max_length=200)
  slug = models.CharField(max_length=200) 

class Industry(models.Model):
  name = models.CharField(max_length=200, null=True, blank=True)
  original_name = models.CharField(max_length=200)
  slug = models.CharField(max_length=200)   

class Stock(models.Model):
  name = models.CharField(max_length=200)
  ticker = models.CharField(max_length=200, unique=True)
  logo = models.CharField(max_length=200, null=True, blank=True)
  website = models.CharField(max_length=200, null=True, blank=True)
  sector = models.ForeignKey(Sector, on_delete=models.CASCADE, null=True)  
  industry = models.ForeignKey(Industry, on_delete=models.CASCADE, null=True)  

Как я могу получить свой json со связанными объектами? Теперь я получаю

0   Object { id: 1, name: "Tesla", ticker: "TSLA", … }
id  1
name    "Tesla"
ticker  "TSLA"
logo    null
website "http://www.tesla.com"
sector_id   1
industry_id 1

Мне нужно получить сектор и отрасль

1 Ответ

0 голосов
/ 12 июля 2020

Вам нужно будет найти запись модели для данного ID в Stock model. Вы можете сделать это в своем методе get_stocks. Другой вариант - использовать сериализатор Stock . Например:

def get_stocks(qty=9):
   stocks = Stock.objects.all()[:qty]
   for stock in stocks:
      try:
         stock.sector = Sector.objects.get(id=stock.sector)
      except Sector.DoesNotExist:
         pass
     
      try:
         stock.industry = Industry.objects.get(id=stock.industry)
      except Industry.DoesNotExist:
         pass

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