这是我的设置模型...基本上我将设置存储为多行中的键值对
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/