python - 如何从Django中的其他模型中将数据添加到其列被引用(外国字段)的模型中
问题描述
我正在尝试将数据添加到我的购物车模型中,但出现错误,因为在我尝试输入数据的字段中是引用为 Items 的 ForeignField。
无法分配“9”:“Cart.pid”必须是“items”实例。
这是我的代码:-
视图.py
def add_cart(request):
pid = request.POST.get('cart_id')
quantity = request.POST.get('quantity')
details = items.objects.filter(pk = request.POST.get('cart_id'))
name = None
price = None
for i in details:
name = i.name
price = i.price
pid = i.id
user_id = request.user.id
total = int(quantity)*price
instance = Cart(pid = pid,quantity = quantity,pro_name = name,pro_price = price,user_id = user_id,total = total)
return redirect('home')
模型.py
class items(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100,default='Item')
desc = models.TextField(max_length=500, default='Best')
price = models.IntegerField()
category = models.CharField(max_length=50,default='Product')
image = models.ImageField(upload_to="media",default='Item Image')
class Cart(models.Model):
pid = models.ForeignKey('items',on_delete=CASCADE,related_name="proid")
name = models.ForeignKey('items',on_delete=CASCADE,related_name="proname")
price = models.ForeignKey('items',on_delete=CASCADE,related_name="proprice")
quantity = models.IntegerField(default=1)
user_id = models.ForeignKey(User,on_delete=CASCADE)
total = models.IntegerField(default=0)
请帮忙!!!
解决方案
当我们在 Django 中使用外键时,可以使用相关对象实例或数据库字段原始值。在您的代码中,您有一个名为pid
. 您可以为其分配一个对象实例:
for i in details:
name = i.name
price = i.price
pid = i # <!-- no i.id, i is the object instance
user_id = request.user.id
total = int(quantity)*price
instance = Cart(pid = pid,quantity = quantity,pro_name = name,pro_price = price,user_id = user_id,total = total)
...或将键值 ( i.id
)分配给神奇创建的属性pid_id
:
for i in details:
name = i.name
price = i.price
pid = i.id
user_id = request.user.id
total = int(quantity)*price
instance = Cart(pid_id = pid,quantity = quantity,pro_name = name,pro_price = price,user_id = user_id,total = total)
# We are ising the raw database value. W read it from `i.id` above.
instance.pid_id = pid
推荐阅读
- django - 如何在 ubuntu 中安装 proj4?make: *** 没有指定目标,也没有找到 makefile。停止。吉姜戈
- python - 基本的熊猫数据框操作问题
- javascript - 如果 Promise.catch() 的顺序不正确,为什么还要调用 .then()?
- android - 第一次运行颤振项目
- python - 网络爬虫获取具有相同标题的表格
- google-tag-manager - GA4 link_text 通常是“(未设置)”
- javascript - 如何获得可点击多边形的六个顶点?
- r - 将 JSONstream 读入 R 数据帧
- excel - VBA Outlook Gmail 发送的项目被标记为垃圾邮件。从浏览器发送正常
- c# - 使用 Polly 刷新令牌的 RestEase 不起作用