python - update_or_create 循环中仅更新/创建数据库中的一行

标签 python django

这是我的设置模型...基本上我将设置存储为多行中的键值对

class Settings(models.Model):
    key = models.CharField(max_length=50 , default=''  ,unique=True )
    value = models.TextField(default='')

所以当我想保存设置时,我想为每个键更新或创建一行 (如果键已经存在,则更新它的值,如果不使用给定的键、值创建新行)

这是我的 View 代码

    jsetting = request.POST.get('jsetting' , None)
    if(jsetting is not None):
        setting  = json.loads(jsetting)
        for k,v in dict.items(setting):
            print(str(k) +' -> '+ str(v))
            Settings.objects.update_or_create({'key':k , 'value':v})

问题是目前它只保存或更新设置字典中的最后一项...所以当它完成循环 dic 时我在数据库中只有 1 行!

我尝试在循环中创建 Setting 的新实例

        for k,v in dict.items(setting):
            s = Settings()
            s.objects.update_or_create({'key':k , 'value':v})

但显然我不能这样做,我收到了这个错误

Manager isn't accessible via Settings instances

最佳答案

我没有使用update_or_create,但根据the docs ,看来除了要更新的值之外,您还必须通过使用一个或多个关键字参数来获取或创建对象。

所以这可能有效:

Settings.objects.update_or_create(key=k, defaults={'value':v})

关于python - update_or_create 循环中仅更新/创建数据库中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645729/

相关文章:

python - 如何在win32机器上安装pycurl而不需要编译

python - pd.to_datetime 是我一半的日期与翻转的日期/月份

python - 获取从串行到输出到 TexCtrl 的持续更新

Django,为什么我在托管期间需要 nginx 和 uWSGI?

python - django-filter - 将查询参数映射到字段名称

python - 重复时间序列数据的 Pandas 滚动中位数

python - 从给定的脚本文件中检索哈希 bang/shebang

python - 如何在 Django 中为我正在做的事情形成一个 URL

django - Django包的间歇性ImportError

python - 如何修复 django-allauth 返回 KeyError : ['key' ]?