Raise ValueError( ValueError: Невозможно присвоить "'TJFIDEL2401'": "Order.discount_code" должен быть экземпляром "DiscountCode"

Я пытаюсь реализовать страницу оформления заказа, используя фреймворк Django. У меня есть модель DiscountCode, связанная с моделью Order как "discount_code = models.ForeignKey(DiscountCode, on_delete=models.SET_NULL, null=True, blank=True)". Когда я нажимаю кнопку "Оформить заказ" на странице оформления заказа, появляется сообщение об ошибке: "raise ValueError(ValueError: Cannot assign "''": "Order.discount_code" должен быть экземпляром "DiscountCode"." - Я потратил уже пару часов, пытаясь решить эту проблему. Проблема возникает, когда срабатывает form.is_valid()

Модели: class DiscountCode(models.Model): code = models.CharField(max_length=50, unique=True) # Unique discount code discount_amount = models.DecimalField(max_digits=5, decimal_places=2) # e.g., 10.00 for a fixed amount discount discount_percent = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True) # e.g., 10.00% for percentage discount valid_from = models.DateTimeField() valid_until = models.DateTimeField() max_uses = models.PositiveIntegerField(default=1) # Number of times the discount can be used users = models.ManyToManyField(Account, blank=True) # Assign to specific users or leave empty for all users is_active = models.BooleanField(default=True) # Active status def __str__(self): return self.code def is_valid(self): now = timezone.now() return self.is_active and self.valid_from <= now <= self.valid_until and self.max_uses > 0 class Order(models.Model): STATUS_CHOICES = ( ('New', 'New'), ('Processing', 'Processing'), ('Shipped', 'Shipped'), ('Delivered', 'Delivered'), ('Cancelled', 'Cancelled'), ) user = models.ForeignKey(Account, on_delete=models.SET_NULL, null=True) payment = models.ForeignKey(Payment, on_delete=models.SET_NULL, blank=True, null=True) discount_code = models.ForeignKey(DiscountCode, on_delete=models.SET_NULL, null=True, blank=True)

Это происходит потому, что Django ожидает, что вы присвоите полю discount_code модели Order реальный экземпляр модели DiscountCode, а вы присваиваете строку.

Что бы это исправить:-

discount_code_instance = DiscountCode.objects.get(code='tjfidel2401')
order.discount_code = discount_code_instance
order.save()
Вернуться на верх