Как создать запись в модели django с помощью get_or_create и select_related
У меня есть класс, как показано ниже:
class GroupProduct(models.Model):
product = models.ForeignKey(
'myapp.Products'
related_name='myapp_group_product')
@classmethod
def create_group_product(cls, p_id, product_id):
cls.objects.get_or_create(id=p_id, defaults=dict(product=product_id).select_related('product')
Я ожидаю, что он создаст запись в таблице со следующими параметрами, однако этого не происходит.
GP = GroupProduct()
GP.create_group_product(3, 225)
В нем говорится, что продукт должен быть экземпляром myapp.Products. Есть ли способ использовать select_related таким образом, а не делать отдельный запрос и обращаться к базе данных?
Вы можете работать с:
cls.objects.select_related('product').get_or_create(
id=p_id,
defaults={'product_id': product_id}
)
Если элемент уже существует, он получит данные product тем же запросом. Если он (еще) не существует, будет выполнен запрос на вставку, и вы сможете получить Product во втором запросе, поскольку он не будет выполнять никакого запроса на выборку и, таким образом, просто создаст запись и вернет объект cls.