Django ForeignKey on a View - PullRequest
       27

Django ForeignKey on a View

1 голос
/ 02 июня 2011

Я создаю приложение django из существующей базы данных.к лучшему или к худшему, у меня есть пара взглядов, на которых я хотел бы основывать свои модели.они выглядят примерно так:

class Device(Model):
  id = models.IntegerField( primary_key=True, db_column='node_id' )
  name = models.CharField(max_length=127, db_column='node' )
  class Meta:
    db_table = 'node' # db view
    managed = False

class Entity(Model):
  id = models.IntegerField( primary_key=True, db_column='_id' )
  device = models.ForeignKey(Device, db_column='node_id' )
  class Meta:
    db_table = 'entity' # db view
    managed = Fase

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

{% for e in entities %}
  {{ e.device.name }}
{% endfor %}

, просматривая журналы, кажется, что он повторяет запросы для каждого 'node_id', и в конечном итоге время ожидания истекает.

(конечно, если я не включу e.device.name все быстро)

есть ли способ, которым я могу оптимизировать это?

, чтобы быть справедливым, «сущность»view уже имеет имя устройства в качестве другого поля (node), поэтому я мог бы использовать его вместо этого, но хотел бы, чтобы отношение существовало.

1 Ответ

0 голосов
/ 02 июня 2011

вы пробовали .select_related () по вашему мнению?

entities = Entity.objects.select_related('device').filter(...)

с другой стороны, если это и старая база данных, и не сгенерированная автоматически django, возможно, node_id может не быть индексом в базе данных, это сильно замедлит любое JOIN.

...