我試圖在我的應用程序中編寫一個內部API,而不必將它與數據庫耦合。如果我叫p.save()& i.save()調用p.image_set前Django:將對象添加到相關集而不保存到數據庫
IntegrityError: products_images.product_id may not be NULL
然而,:
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的拋出了一個錯誤。添加(我)它的作品。有沒有什麼方法可以將對象添加到相關的對象集中,而不必先保存到數據庫?
感謝您的回覆。但是,由於對象是在一個函數中創建的,而函數是內部API的一部分,所以我不想將它們保存到數據庫中。在這一點上,物體很可能處於不完整的狀態。 –
另外,如果我使用你的建議,我會損害數據庫的一致性。沒有與產品關聯的圖像不能存在於數據庫中。如果我要強制執行此操作,則必須在數據庫事務塊內完成整個函數調用,以便在發生錯誤時(將映像保存到數據庫後)數據庫將回滾到一致狀態。在我看來,解耦API的假設太多了。 –