我使用Django 1.8a1,并有我的模型是这样 -和PostgreSQL的ArrayField在Django
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']
不知道我在做什么错。任何帮助将深表赞赏
没能得到期望的结果。即使在保存之后,更改也不会反映在数据库中..... – 2015-03-13 08:36:42
如何检查更改是否在数据库中?你记得提交你的数据库事务吗? – 2015-03-14 02:12:15
问题在于列cart_details ...在ArrayField以外的类型的任何其他列上,我可以使用obj.save()方法更新值...不需要对db进行手动提交。我认为他们是ArrayField类型的列的一些问题。 Django orm无法处理这类字段(可能是因为django 1.8仍在开发阶段) – 2015-03-14 11:07:02