python - 从 Django 的 PostgreSQL 的 ArrayField 中删除元素

标签 python django postgresql django-1.8

我正在使用 django 1.8a1 并且我的模型是这样的——

from django.contrib.postgres.fields import ArrayField
from django.contrib.auth.models import User
# Create your models here.

class cart(models.Model):
    user = models.ForeignKey(User, blank=True, null=True)
    cart_details = ArrayField(models.CharField(max_length=200), null=True, blank=True)
    def __str__(self):  # __unicode__ on Python 2
        return self.name.username

我的 postgres 数据库中有这样一行

select * from cart_cart;
 id |          cart_details           | user_id 
----+---------------------------------+---------
  1 | {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2} |       1

我想删除购物车详情中的一些商品

我写了下面的代码

obj = cart.objects.filter(user=request.user, cart_details__contains=[product_id])
if obj.exists():
    obj[0].cart_details = obj[0].cart_details.remove(str(product_id))
    obj[0].save()

我也试过类似的方法,但是还是不行

print obj[0].cart_details
[u'2', u'2', u'2', u'2', u'2', u'2', '2']
lis1=obj[0].cart_details
lis1.remove('2')
print lis1
[u'2', u'2', u'2', u'2', u'2', u'2',]
obj[0].cart_details = lis1
obj.save()
print obj[0].cart_details
[u'2', u'2', u'2', u'2', u'2', u'2', '2']

不知道我做错了什么。任何帮助将不胜感激

最佳答案

您需要从数据库中刷新 obj[0],因为对数据库的更改不会自动反射(reflect)到已加载的对象实例中。

obj.save()
obj_refreshed = cart.objects.filter(user=request.user, cart_details__contains=[product_id]) 
print(obj_refreshed[0].card_details)

我也建议你关注PEP-8 Python style guide并将您的类(class)名称大写。

关于python - 从 Django 的 PostgreSQL 的 ArrayField 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29026868/

相关文章:

django - 上传大文件时超时?

json - PostgreSQL 无法在标量上调用 json_object_keys

postgresql - PostgreSQL 中的多个单独连接

python - flask ssl。总是写连接不安全

python - 为什么使用 Nginx 运行 Flask 需要 WSGI 包装器?

python - 如何使用 Django 和 Python 设置环境变量?

python - Django 在数据库中保存带有额外字符的表单字符串 (u'string')

javascript - 如何从 Python 生成 D3.js 循环树状图代码

python - 有人可以解释一下这个简单的Python代码吗?

sql - 从表中删除第 n 行(postgresql)