Невозможно получить первичный ключ в модели 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

хотя я не уверен, почему это было проблемой в первую очередь.

Вернуться на верх