保存到django数据库

时间:2017-04-08 19:46:00

标签: python django python-2.7 django-models

我尝试使用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

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

2 个答案:

答案 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检索一次值并对其进行操作。