2015-09-05 4 views
0

У меня есть две модели Site и MetricMetric, для которых имеет ForeignKey к Site.Джанго доступа Первичная модель Атрибут с select_related

Я пытаюсь получить объект QuerySet, который имеет как Site.name, так и атрибуты Metric, которые я хочу.

Metric.objects.all().select_related('site')

Am Я буду об этом правильный путь?

ответ

1

С вашим запросом Django загружает метрики и связанные с ними сайты одновременно.

metrics = Metric.objects.all().select_related('site') 

Вы можете затем цикл через QuerySet, либо в виде или шаблона, а также получить доступ к веб-сайт атрибутов с помощью внешнего ключа site.

for metric in metric: 
    print(metric.field1) # field on metric model 
    print(metric.site) # related site 
    print(metric.site.name) # name of related site 
+0

Нет никакого очевидного способа включить другое поле, подобное этому. Вы можете включить '' site__name'' в ['values ​​()'] (https://docs.djangoproject.com/en/1.8/ref/models/querysets/#django.db.models.query.QuerySet.values) , но вам может не понравиться это имя ключа. – Alasdair

1

select_related - это просто оптимизация для уменьшения количества SQL-запросов. Таким образом, Metric.objects.all().select_related('site') только что вернет все ваши Metric объектов более эффективно. Оттуда вы можете перебирать запрос Metric и делать что-то с Site. То есть.

my_first_metric = Metric.objects.all().select_related('site').first() 
# my_first_metric.site.name will be the name of the site associated with that metric 
+0

Спасибо Miestro, но, к сожалению, это просто возвращает '__str__' для' Metric'. –

+1

Что возвращает '__str__'? 'My_first_metric'? Если вы хотите, чтобы сайт затем выполнял 'my_first_metric.site' – Meistro

Смежные вопросы