Как получить массив отношений внешнего ключа в django

У меня есть таблица страны и ее таблица перевода с внешним ключом country_id, таблица городов с внешним ключом country_id и таблица перевода города с внешним ключом city_id. Итак, мой model.py нравится этому.

from django.db import models

# Create your models here.


class Country(models.Model):
    #id             = models.IntegerField(primary_key=True)
    iso_code    = models.CharField(max_length=2, unique=True)
    slug        = models.CharField(max_length=255, unique=True)
    is_featured = models.IntegerField(max_length=1)

    class Meta:
        db_table = 'rh_countries'

class CountryTranslation(models.Model):
    country     = models.ForeignKey(Country, on_delete=models.CASCADE)
    name        = models.CharField(max_length=255)
    description = models.TextField(blank=True, null=True)
    locale      = models.CharField(max_length=2)

    class Meta:
        db_table = 'rh_countries_translations'

class City(models.Model):
    country     = models.ForeignKey(Country, on_delete=models.CASCADE)

    class Meta:
        db_table = 'rh_cities'

class CityTranslation(models.Model):
    city        = models.ForeignKey(City, on_delete=models.CASCADE)
    name        = models.CharField(max_length=255)
    description = models.TextField(blank=True, null=True)
    locale      = models.CharField(max_length=2)

    class Meta:
        db_table = 'rh_city_translations'

И мой файл views.py вроде этого.

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
from django.template import loader
from home.models import Country, CountryTranslation, City, CityTranslation
from django.db.models import F, Count

def index(request):
    #return HttpResponse("Hello, world. You're at the polls index.")
    template = loader.get_template('home/index.html')
    context = {
        "countries" : Country.objects.filter(
                            is_featured=1,
                            countrytranslation__locale='en'
                        ).annotate(
                            name=F('countrytranslation__name'),
                            totalCities=Count('city', distinct=True)
                        )
    }
    return render(request, 'home/index.html', context)

Таким образом, у меня есть полные города страны. Но мне нужен список из 3 городов с названием всей страны с локалью en. Пожалуйста, помогите мне получить данные таким образом. образец вывода должен быть:

Array{
    0 => {
        id => 1
        name => 'Australia',
        is_featured => 1,
        totalCities => 5,
        cities => {
            0 => {
                id => 1,
                name => 'Sydney',
                locale => 'en'
            },
            1 => {
                id => 2,
                name => 'Melbourne',
                locale => 'en'
            },
            2 => {
                id => 3,
                name => 'Perth',
                locale => 'en'
            }
        }
    },
    2 => {
        id => 2
        name => 'Spain',
        is_featured => 1,
        totalCities => 12,
        cities => {
            0 => {
                id => 9,
                name => 'Madrid',
                locale => 'en'
            },
            1 => {
                id => 10,
                name => 'Bercelona',
                locale => 'en'
            },
            2 => {
                id => 11,
                name => 'Valencia',
                locale => 'en'
            }
        }
    }
}

"Но мне нужен список из 3 городов, название всей страны. Пожалуйста, помогите мне получить данные таким образом.", мне не совсем понятно, что вы хотите. Возможно, предоставление образца вывода (и данных) поможет прояснить формулировку проблемы.

Willem Van Onsem 10.09.2018 10:26

образец вывода, который я добавил, вы можете проверить, что я добавил массив, но это может быть объект.

Raj 10.09.2018 10:34
0
2
86
0

Другие вопросы по теме