我尝试使用append将信息保存到ArrayField。根据这个post它应该是可能的,但我不能让它工作。我没有创建一个新对象,它已经存在我只需要向ArrayField附加其他信息
代码段:
def isInDatabase(catInfo):
cat = catagories.objects
catName = str(catInfo)
iban = catInfo.getIban()
try:
cat.get(Naam = catName)
except ObjectDoesNotExist:
print catName, 'is not in database'
# NOTE: create catagory
p = cat.create(Naam = catName, Rekening = [iban])
print catName, 'Has been stored in the database with', iban
else:
ibanList = cat.get(Naam = catName).Rekening
editCat = cat.get(Naam = catName)
print catName,'is in db, the following ibans are stored:\n\n', ibanList,'\n\n'
if iban in ibanList:
print iban,'is already in the list\n'
else:
ibanList.append(iban)
editCat.save()
print 'Updated list for',catName,'with -->',iban,'\nlist is now -->', ibanList,'\n'
editCat.save()
是不保存的保存命令。
models.py
class catagories(models.Model):
Naam = models.CharField(max_length=10)
Rekening = ArrayField(models.CharField(max_length = 34), blank = True)
def __str__(self):
return self.Naam
那么我需要进行哪些修改才能将其保存到数据库中。我没有收到任何错误,因此脚本运行正常,但不会保存到数据库中。
答案 0 :(得分:0)
这是问题代码:
ibanList = cat.get(Naam = catName).Rekening
editCat = cat.get(Naam = catName)
...
ibanList.append(iban)
editCat.save()
editCat
保持不变。仅使用一次数据库调用,然后从要编辑的对象中获取ibanList
。
editCat = cat.get(Naam = catName)
ibanList = editCat.Rekening
答案 1 :(得分:0)
使用editCat
初始化editCat = cat.get(Naam = catName)
时,实际创建的新变量与ibanList
无关。您需要做的是更改已检索的值。可能的解决方案可能是
editCat = cat.get(Naam = catName)
editCat.Rekening.append(iban)
editCat.save()
另一个值得提及的问题是冗余数据库调用的存在。每次调用get
时,实际上都会在db上发出新请求(准确地说,在评估queryset时)。最好只从db检索一次值并对其进行操作。