【问题标题】:save to django database保存到 django 数据库
【发布时间】:2017-09-04 02:36:42
【问题描述】:

我也尝试使用追加将信息保存到 ArrayField。根据这个post 应该是可能的,但我不能让它工作。我没有创建一个新对象,它已经存在我只需要在 ArrayField 中附加额外的信息

代码sn-p:

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

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

【问题讨论】:

    标签: python django python-2.7 django-models


    【解决方案1】:

    这是问题代码:

    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
    

    【讨论】:

      【解决方案2】:

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

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

      另一个值得一提的问题是冗余数据库调用的存在。每次调用get 时,您实际上都会在 db 上发出新请求(准确地说是在评估查询集时)。最好只从 db 中检索一次值并对其进行操作。

      【讨论】:

        猜你喜欢
        • 2013-08-23
        • 2017-12-01
        • 2017-04-24
        • 2018-07-07
        • 1970-01-01
        • 2017-05-13
        • 2022-11-30
        • 2021-10-07
        相关资源
        最近更新 更多