Как уменьшить поле выбора для производительности базы данных при вызове поля точки экземпляра в django orm?

#django #django-models #django-rest-framework #django-orm

#django #django-модели #django-rest-framework #django-orm

Вопрос:

Когда необходимо проверить значение поля экземпляра при использовании точки (.) для доступа к полю следующим образом.

 class store(models.Model):
  ........
  is_open = models.BooleanField(defrault=False)
  ........

class User(AbstractBaseUser):
  ........
  store = models.ForeignKey(Store)
  ........
  

Мне нужно проверить значение is_open в некотором API, я делаю следующим образом,

 request.user.store.is_open
  

В этом случае django выполняет запрос выбора со всеми полями, но мне нужно только is_open поле.

Как я могу выбрать только одно поле ( is_open в данном случае) вместо выбора всех полей?

Комментарии:

1. values или values_list docs.djangoproject.com/en/3.0/ref/models/querysets /…

2. @hansTheFranz Спасибо, но пользователь — это единственный экземпляр здесь, как я могу использовать values или values_list здесь?

Ответ №1:

Я подозреваю, что прирост производительности минимален, но попробуйте это:

 is_open = User.objects.filter(id=request.user.id).values('store__is_open').first()['store__is_open']