2017-04-08 146 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