如何在Django数据库记录中设置多个字段

3

我希望了解如何为现有的Django模型对象设置多个字段的最佳方法。 我有一个包含许多字段的模型:

class Foo(models.Model):
    Field1 = models.CharField(max_length=40)
    Field2 = models.CharField(max_length=40)
    Field3 = models.CharField(max_length=40)
    etc...

另外,我有一个字典,其中包含特定记录的某些字段的更改:

data = {'field1': 'value1', 'field5': 'value5', 'field7': 'value7'}
record = Foo.objects.get(pk=1)

我希望将record中的字段设置为data中的新值。有什么最好的方法可以做到这一点吗?是否有一种方法可以解包字典并修改记录中的适当字段?我意识到我可以使用以下方式迭代字典:

for k, v in data.iteritems():
     setattr(entry, k, v)
entry.save()

我认为有一种方法可以调用类似以下的内容:
entry.set_values(**data)

有类似的东西吗?还是我走错了方向?
2个回答

6

4
更新仅适用于查询集,但是这个操作可行:Foo.objects.filter(pk=1).update(**data)。 感谢您的建议。 - Brian Fisher
2
请注意,这不会触发任何保存相关的信号,也不会在实例上调用.save()。这可能是期望的情况,也可能是无法接受的情况。如果需要触发,请执行Foo.objects.filter(pk=1).update(**date); Foo.objects.get(pk=1).save() - Matthew Schinckel
请参考以下问题: https://dev59.com/m3I-5IYBdhLWcg3w-96b - tobych
链接已损坏。 - Cyzanfar
@Cyzanfar 已修复 - Brandon Taylor

0

关于@brandon的答案进行更正。

请确保使用.filter()方法而不是.get()方法,因为.get()方法会返回匹配的对象或引发DoesNotExist异常

错误: Foo.objects.get(pk=1).update(**data)

正确: Foo.objects.filter(pk=1).update(**data)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接