Невозможно присвоить "'Рубашка мужская": "CartProdVarient.cart_product" должен быть экземпляром "CartProduct".
Модели
class CartProduct(models.Model):
cart_product_name = models.CharField(max_length=200)
cart_holder = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.cart_product
class CartProdVarient(models.Model):
cart_product = models.ForeignKey(CartProduct, on_delete=models.CASCADE)
cart_prod_varient = models.CharField(max_length=200)
def __str__(self):
return self.cart_prod_varient
Виды
def add_cart(request):
prod = Product.objects.get(id=request.POST.get('product_id'))
CartProdVarient(cart_product=prod.product_name).save()
return render(request, 'app/service-page.html')
Проблема Я хочу присвоить некоторое значение "cart_product", в то время как это Внешний ключ, но это дает мне ошибку...
я хочу что-то вроде этого :
CartProdVarient(cart_product="T-Shirt", cart_prod_varient="small size").save()
T-Shirt уже есть в "cart_product_name"
Ваши модели работают нормально. Интеграция внешних ключей и поля модели корректны. В модели нет ошибок.
Проблема в ваших взглядах :
prod = Product( id = request.POST.get("product_id")
# this return an product object named prod , and this is a product object.
Смотрите вашу модель CartProductVariant , вы определили cart_product как foreignkey для модели CartProduct .
class CartProdVarient(models.Model):
cart_product = models.ForeignKey(CartProduct, on_delete=models.CASCADE)
cart_prod_varient = models.CharField(max_length=200)
def __str__(self):
return self.cart_prod_varient
Ваша первая ошибка . Посмотрите на свои взгляды в этой строке :
CartProdVarient(cart_product=prod.product_name).save()
Вы определили связь с объектом CartProduct, но вы предоставляете имя объекта CartProduct. Это две разные модели. Это может быть первым случаем ошибки .
Ваша вторая ошибка. Теперь посмотрите на свои взгляды, в этой строке :
CartProdVarient(cart_product=prod.product_name).save()
Вы определили связь с CartProduct, в Django при создании внешнего ключа в качестве аргумента указывается объект, но вы указываете название продукта, в то время как cart_product берет объект самого CartProduct. Он не принимает поля модели, он принимает сам объект.
Измените код на следующий, если модель CartProduct и Product одинаковы :
CartProdVarient(cart_product=prod).save()
Если модели CartProduct и Proudct не совпадают (а я думаю, что это не так), вам следует изменить аргумент cart_product объекта Product на объект CartProject.
CartProdVarient(cart_product= CartPoduct.objects.get(id = request.POST.get("cart_product_id"))).save()
Весь код представления должен быть изменен в зависимости от модели, которую вы создали, и от того, какие отношения вы определили для моделей .
Если модель Product и модель CartProduct одинаковы (а я не думаю, что это так). Используйте этот фрагмент кода .
def add_cart(request):
prod = Product.objects.get(id=request.POST.get('product_id'))
CartProdVarient(cart_product=prod).save()
return render(request, 'app/service-page.html')
Если они разные, используйте следующее :
def add_cart(request):
prod = CartProduct.objects.get(id=request.POST.get('cart_product_id'))
CartProdVarient(cart_product=prod).save()
return render(request, 'app/service-page.html')