2017-04-08 202 views
-1

我也尝试使用append将信息保存到ArrayField。根据这post它应该是可能的,但我不能得到它的工作。我不是创建新的对象,它已经存在,我只是需要更多的信息附加到ArrayField保存到django数据库

代码片段:

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

这是问题的代码:

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 
+0

啊isee有道理谢谢! – Kevin

0

当初始化editCateditCat = cat.get(Naam = catName),实际上还需要创建新的变量,这是不符合相关ibanList。你需要做的是改变已经检索的值。可能的解决方案可能是

editCat = cat.get(Naam = catName) 
editCat.Rekening.append(iban) 
editCat.save() 

另一个值得提及的问题是存在冗余数据库调用。每次你打电话给get,你实际上都会对db做出新的请求(准确地说,当queryset被评估时)。最好从db中只检索一次值并对其进行操作。

+0

这实际上是一个很好的建议,谢谢! – Kevin