如何使用 get_or_create 和 select_related 创建 Django 模型记录

How to create a django model record using get_or_create and select_related

我有一个 class 如下所示:

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')

所以我希望它使用以下参数在 table 中创建一条记录,但它没有。

GP = GroupProduct()
GP.create_group_product(3, 225)

它说产品必须是 myapp.Products 实例。有没有办法以这种方式使用 select_related 而不是进行单独的查询并访问数据库?

您可以使用:

cls.objects.<strong>select_related('product')</strong>.get_or_create(
    id=p_id,
    defaults={'product_id': product_id}
)

如果该项目已经存在,它将使用相同的查询获取 product 数据。如果它(还)不存在,它将进行插入查询,然后您可以在第二个查询中获取 Product,因为它不会进行任何获取查询,因此只需创建一条记录和 return一个cls对象。