Как создать запись в модели 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.

Вернуться на верх