如何使用 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
对象。
我有一个 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
对象。