Создайте объект, который имеет ForeignKey с другим объектом
Предположим, что у меня есть две модели:
class Category(models.Model):
title = models.CharField(max_length=255)
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=255)
Я хочу создать объект Product.
Предположим, я получу category_id от POST запрос
>>> category = Category.objects.get(id=category_id)
>>> Product.objects.create(category=category, title='Send the category object')
>>> Product.objects.create(category_id=category_id, title='Send only category id')
Как вы видите, есть два варианта, первый - отправить category экземпляр в create() метод и второй - отправить category_id, поэтому мой вопрос в том, какой подход лучше для производительности ?
Я знаю, что мне нужно проверить, существует ли этот category в DB или нет, но это не тот случай, о котором я говорю в вопросе.
Если у вас есть первичный ключ (category_id), то нет необходимости сначала получать категорию, поэтому вы можете использовать:
Product.objects.create(category_id=category_id, title='Send only category id')
таким образом, будет сделан только один запрос: запрос для создания Product, и, таким образом, можно будет избежать запроса на категорию.
Эти два .create(…) сделают совершенно одинаковый запрос, так как Django просто получит .id объекта category и сделает запрос с этим id.
Я знаю, что мне нужно проверить, существует ли эта категория в БД или нет, но это не тот случай, о котором я говорю в вопросе.
Нет, если сделать запрос с category_id, для которого не существует записи в таблице, стоящей за моделью Category, это вызовет ошибку IntegrityError: База данных обычно гарантирует, что ForeignKey всегда указывает на действительные элементы, поэтому Category.objects.get(id=category_id) не является необходимым : если вы запрашиваете его только для получения категории, вы можете опустить это.