Python 保存到django数据库

Python 保存到django数据库,python,django,python-2.7,django-models,Python,Django,Python 2.7,Django Models,我也在尝试使用append将信息保存到ArrayField。根据这一点,这应该是可能的,但我不能让它工作。我不是在创建一个新对象,它已经存在了。我只需要在ArrayField中添加额外的信息 代码段: def isInDatabase(catInfo): cat = catagories.objects catName = str(catInfo) iban = catInfo.getIban() try: cat.get(Naam = catNa

我也在尝试使用append将信息保存到ArrayField。根据这一点,这应该是可能的,但我不能让它工作。我不是在创建一个新对象,它已经存在了。我只需要在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()
是不保存的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

那么我需要做什么修改才能将其保存到数据库中呢。我没有收到任何错误,因此脚本运行正常,但不会保存到数据库。

这是问题代码:

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

当您使用
editCat=cat.get(Naam=catName)
初始化
editCat
时,您实际上创建了一个与
ibanList
无关的新变量。您需要做的是更改已经检索到的值。可能的解决办法是

editCat = cat.get(Naam = catName)
editCat.Rekening.append(iban)
editCat.save()
另一个值得一提的问题是存在冗余的db调用。每次调用
get
,实际上都会对db发出新的请求(确切地说是在计算queryset时)。最好只从db中检索一次值,并对其进行操作