get_or_create() 必须立即保存吗?(Django)

39 投票
1 回答
14489 浏览
提问于 2025-04-15 12:45

我需要用类似于 get_or_create() 的方法,但问题是我有很多字段,而且我不想设置默认值(其实这些默认值也没有意义)。如果我不设置默认值,就会报错,因为这个方法似乎会立刻保存对象。

我可以把字段设置为 null=True,但我不想要空字段。

有没有其他方法或者额外的参数可以传给 get_or_create(),这样它可以创建一个对象,但在我调用 save() 之前不保存它?

谢谢。

1 个回答

39

你可以直接这样做:

try:
    obj = Model.objects.get(**kwargs)
except Model.DoesNotExist:
    obj = Model(**dict((k,v) for (k,v) in kwargs.items() if '__' not in k))

这基本上就是get_or_create的功能,只是没有提交的步骤。

撰写回答