如何在创建其他模型对象时自动创建Django模型的对象



我想为" productout " "创建对象Model When "正在创建模型

这是我的代码

class CusOrder(models.Model):
cus_name = models.CharField(max_length=100)
cus_number = models.CharField(max_length=11)
product = models.ManyToManyField(Product)
qty = models.IntegerField(default=0)
sell_price = models.IntegerField(default=0)
def __str__(self):
return self.cus_name

def save(self,*args,**kwrgs):
ProductOut.objects.create(
refrence=self.cus_number,
stock_out = self.qty,
sell_price = self.sell_price,
product = self.product.P_name

)
super(CusOrder,self).save(*args,**kwrgs)

class ProductOut(models.Model):
refrence = models.ManyToManyField(CusOrder)
stock_out = models.IntegerField(default=0)
sell_price = models.IntegerField(default=0)
product = models.ForeignKey(Product,on_delete=models.CASCADE)

def __str__(self):
return self.refrence.cus_number

但是我得到一个ValueError,它是'""需要有一个值字段"id"在使用这种多对多关系之前当我想保存一个CusOrder对象

here Is My Whole

class Catagory(models.Model):
name = models.CharField(max_length=60)

def __str__(self):
return self.name
class Product(models.Model):
P_name = models.CharField(max_length=30)
stock_in = models.IntegerField(default=0)
unit_price = models.IntegerField(default=0)
cata = models.ForeignKey(Catagory, on_delete=models.CASCADE)
def __str__(self):
return self.P_name

class CusOrder(models.Model):
cus_name = models.CharField(max_length=100)
cus_number = models.CharField(max_length=11)
product = models.ManyToManyField(Product)
qty = models.IntegerField(default=0)
sell_price = models.IntegerField(default=0)
def __str__(self):
return self.cus_name

def save(self,*args,**kwrgs):
ProductOut.objects.create(
refrence=self.cus_number,
stock_out = self.qty,
sell_price = self.sell_price,
product = self.product.P_name

)
super(CusOrder,self).save(*args,**kwrgs)

class ProductOut(models.Model):
refrence = models.ManyToManyField(CusOrder)
stock_out = models.IntegerField(default=0)
sell_price = models.IntegerField(default=0)
product = models.ForeignKey(Product,on_delete=models.CASCADE)

def __str__(self):
return self.refrence.cus_number

class ReturnedProduct(models.Model):
cus_number = models.ForeignKey(CusOrder,on_delete=models.CASCADE)
product = models.ForeignKey(Product,on_delete=models.CASCADE)
qty =  models.IntegerField(default=0)

def __str__(self):
return self.cus_number.cus_number

怎样做才是正确的。

refrence应该有CusOrder实例,并且在创建之前应该调用super,因为应该首先创建CusOrder对象。

def save(self,*args,**kwrgs):
instance = super(CusOrder,self).save(*args,**kwrgs)
p_instance = ProductOut.objects.create(
stock_out = self.qty,
sell_price = self.sell_price,
product = self.product.first()
)
p_instance.refrence.add(instance)
p_instance.save()

最好的方法是使用Django信号,在上面的例子中特别使用postrongave。Django Signals- master pre_save和postrongave

最新更新