python - 通过 ForeignKey 的 Django 用户特定对象
问题描述
我正在尝试实现一个用户特定的购物车,它看起来像:
class Cart (models.Model):
items = []
totalprice = 0
user = models.ForeignKey(User, on_delete=models.CASCADE,
related_name="cart", null=True)
我有一个 HTML 模板,它将显示一个项目并允许当前用户将其添加到他们的购物车:
<ul>
<img src={{ item.pic.url }}>
<li>{{ item.name }}</li>
<li>{{ item.desc }}</li>
<li>${{ item.cost }}</li>
</ul>
<br>
<a href={% url 'gallery:add_to_cart' item.id %}>Add to Cart</a>
add_to_cart 函数是:
def add_to_cart (request, id):
if request.user.is_authenticated:
if not request.user.cart.all():
c = Cart()
c.save()
request.user.cart.add(c)
request.user.cart.all()[0].addItem(Item.objects.get(id=id))
return HttpResponseRedirect('/gallery/')
对于第一个用户来说一切正常,但是一旦第一个用户注销并且另一个用户登录,他们的购物车似乎是交织在一起的。Django 将为第二个用户创建一个购物车,但这个购物车不会初始化为空;它将与第一个用户的购物车具有相同的内容。
作为第二个用户将任何项目添加到购物车后,该项目将被添加到两个购物车中,并且它们的内容将相同。
简而言之,在访问他们的购物车时,我无法区分各个用户。有什么我可以做的吗?我很感谢任何建议。
谢谢。
解决方案
您Cart
的字段是 python 对象,而不是数据库项目。所以它只是改变了python中的对象。你要:
items = models.ManyToManyField(Item)
totalprice = models.IntegerField()
这意味着items
和totalprice
现在与外键一起存储在数据库中User
。进行此更改后,请确保makemigrations
与migrate
您的数据库一致。
推荐阅读
- swift - 在swift iOS中以编程方式批量设置按钮图像
- javascript - 在附加的 td 上获得 x-editable
- c# - C# WebApi 登录验证
- netlogo - 如何使用两条相交线的概念在 Netlogo 中实现避障(龟头与由补丁组成的墙)
- vue.js - 组件错误地从其他组件输出内容
- blazor - 如何知道 EventCallback 何时被触发?
- openssl - LibreSSL 为 aes-256-gcm 提供身份验证标签
- django - docker容器中的cronjob无法连接到其他容器
- datetime - Hive:在“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”中转换缺少秒数的字符串日期时间
- java - 如何从数据库中获取数据?