Невозможно получить первичный ключ в модели django
Я пытаюсь создать приложение для выставления счетов на django
class CustomerDetailsModel(models.Model):
Customer_ID = models.IntegerField(unique=True,auto_created=True,primary_key=True)
Civil_ID = models.CharField(max_length=50,unique=True)
Customer_Name =models.CharField(max_length=200,unique=True)
phone_number_1 = models.CharField(max_length=20,blank=True)
phone_number_2 = models.CharField(max_length=20,blank=True,null=True)
Customer_Disc = models.TextField(blank=True,null=True)
created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
def __str__(self) -> str:
return self.Customer_Name
class InvoiceModel(models.Model):
Invoice_ID = models.IntegerField(unique=True,auto_created=True,primary_key=True)
Customer_ID = models.ForeignKey(CustomerDetailsModel,on_delete=models.CASCADE)
Civil_ID = models.IntegerField(unique=True)
Customer_Name =models.CharField(max_length=200,unique=True)
phone_number_1 = models.CharField(max_length=8)
InvNo = models.IntegerField()
Item_ID = models.IntegerField()
Item_Name = models.CharField(max_length=200)
Rate = models.DecimalField(max_digits=8,decimal_places=2)
TotQ = models.DecimalField(max_digits=8,decimal_places=2,default=0.0)
TotAmount = models.DecimalField(max_digits=8,decimal_places=2,default=0.0)
Status = models.CharField(max_length=200)
Date = models.DateField(auto_created=True)
Month = models.CharField(max_length=3)
created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
def __str__(self) -> str:
return str(self.BookNo)
Это две модели, которые я использую. У меня не было проблем с созданием нового клиента, но когда дело дошло до создания счета, он показал ошибку значения для Customer_ID
'ValueError: save() запрещена для предотвращения потери данных из-за несохранения связанного объекта 'Customer_ID'.'
После использования точек прерывания в VS Code, я обнаружил, что поле Customer_ID возвращает 'None'.
Я пробовал удалять бд и начинать заново, но все равно получал те же результаты
это функция для создания счета-фактуры
def update_invoice(cid,data):
inv = InvoiceModel(
Customer_ID = cid,
Civil_ID = cid.Civil_ID,
Customer_Name =cid.Customer_Name,
phone_number_1 =cid.phone_number_1,
InvNo = data['incno']
Item_ID = cartItemModel.objects.values_list('Item_ID'),
Item_Name = cartItemModel.objects.values_list('Item_Name'),
Rate = cartItemModel.objects.values_list('RPI'),
TotQ = cartItemModel.objects.values_list('PGR'),
TotAmount = cartItemModel.objects.values_list('TotA'),
Status = 'Ongoing',
Month = shortmonthname,
)
return inv
Я изменил его на 'CustomerDB.objects.update_or_create' и он начал работать. Я сделал то же самое для других функций
def update_customerdb(data):
p,created = CustomerDetailsModel.objects.update_or_create(
Customer_Name = data['name'],
defaults={
'Civil_ID' : data['civilid'],
'phone_number_1' : data['ph'],
'Customer_Disc' : data['disc']
}
)
return p,created
def update_invoice(cid,data):
inv = InvoiceModel(
Customer_ID = cid,
Civil_ID = cid.Civil_ID,
Customer_Name =cid.Customer_Name,
phone_number_1 =cid.phone_number_1,
InvNo = data['incno']
Item_ID = cartItemModel.objects.values_list('Item_ID'),
Item_Name = cartItemModel.objects.values_list('Item_Name'),
Rate = cartItemModel.objects.values_list('RPI'),
TotQ = cartItemModel.objects.values_list('PGR'),
TotAmount = cartItemModel.objects.values_list('TotA'),
Status = 'Completed',
Month = shortmonthname,
)
return inv
хотя я не уверен, почему это было проблемой в первую очередь.