Django / Python - дБ хиты при доступе к переменным - PullRequest
3 голосов
/ 01 июля 2011
class AppUser(models.Model):
    user = models.ForeignKey(User, unique=True)
    slug = models.SlugField(editable=False, blank=True)

Для приведенной выше модели предположим, что у нас есть объект "appuser", который мы визуализировали в шаблоне

Ударяет ли django пользователя db каждый раз, когда мы используем его как appuser.user.username в нашем коде??

Любая помощь о том, как в django / python db производится поиск при обращении к внешнему ключу и переменным многие-ко-многим ??

Ответы [ 3 ]

2 голосов
/ 01 июля 2011

Вы должны внимательно прочитать все подробности оптимизации доступа к базе данных: https://docs.djangoproject.com/en/1.3/topics/db/optimization/

А select_related():

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

Что касается быстрого ответа на ваш вопрос: это зависит от того, как вы получили объект

С

appuser = AppUser.objects.get(pk=id)

он попадет в базу данных отдельно для appuser.user.

Но с

appuser = AppUser.objects.select_related().get(pk=id)

Он выполнит объединенный запрос, поэтому доступ к appuser.user не вызывает запрос SQL.

0 голосов
/ 01 июля 2011

это в документах

наборы запросов ленивы

при оценке наборов запросов

для уменьшения попаданий в дб, проверьтеBéres Botond ответ

0 голосов
/ 01 июля 2011

SQL Logging должен быть включен, если settings.DEBUG установлен в True. Что касается вашего вопроса, то да, AppUser присоединится к таблице User (используя первичный ключ), когда вы выполните appuser.user.username.

Если вы используете веб-сервер dev, вы должны увидеть журналы на консоли.

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