Django:将对象添加到相关集而不保存到数据库

2024-01-24

我试图在我的应用程序中编写一个内部 API,而不必将其与数据库耦合。

class Product(models.Model):
    name=models.CharField(max_length=4000)
    price=models.IntegerField(default=-1)
    currency=models.CharField(max_length=3, default='INR')

class Image(models.Model): 
    # NOTE -- Have changed the table name to products_images
    width=models.IntegerField(default=-1)
    height=models.IntegerField(default=-1)
    url=models.URLField(max_length=1000, verify_exists=False)
    product=models.ForeignKey(Product)

def create_product:
    p=Product()
    i=Image(height=100, widght=100, url='http://something/something')
    p.image_set.add(i)
    return p

现在,当我调用 create_product() 时,Django 会抛出一个错误:

IntegrityError: products_images.product_id may not be NULL

但是,如果我在调用 p.image_set.add(i) 之前调用 p.save() 和 i.save() ,它就可以工作。有没有什么方法可以将对象添加到相关对象集中,而无需先将它们保存到数据库中?


def create_product():
    product_obj = Product.objects.create(name='Foobar')
    image_obj = Image.objects.create(height=100, widght=100, url='http://something/something', product=product_obj)
    return product_obj

解释:必须首先创建 Product 对象,然后将其分配给 Image 对象,因为此处的 id 和 name 是必填字段。

我想知道为什么您不要求在第一种情况下在数据库中输入产品?如果有任何具体原因,那么我可以建议您采取一些解决方法?

编辑:好的!我想我明白了,您最初不想将产品分配给图像对象。创建一个产品字段为 null 等于 true 怎么样?

product = models.ForeignKey(Product, null=True)

现在,你的函数变成这样:

def create_product():
        image_obj = Image.objects.create(height=100, widght=100, url='http://something/something')
        return image_obj

希望对您有帮助吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django:将对象添加到相关集而不保存到数据库 的相关文章

随机推荐