django管理员在哪里实际保存了它的模型?
我想打印一些仅在保存发生后创建的模型字段,但UserCreationForm保存方法始终使用commit = False调用,并且似乎返回用户,因此保存发生在其他地方。
class MyUserCreationForm(UserCreationForm):
...
def save(self, commit=True):
# django admin calling this with commit=False... save occurs somewhere else.
...
if commit:
print("this never gets printed")
user.save()
# line below prints nothing
print(user.field_set_after_model_is_saved)
return user
p.s:我的模型正常保存,而不是我预期的位置。
答案 0 :(得分:0)
这个save()方法接受一个可选的commit keyword参数 接受True或False。如果使用commit = False调用save(), 然后它将返回一个尚未保存到的对象 数据库。在这种情况下,您可以在结果上调用save() 模型实例。如果要进行自定义处理,这非常有用 保存之前的对象,或者如果要使用其中一个 专业的模型保存选项。默认情况下,commit为True。
来自docs。
当您使用commit=False
时,您还没有保存在数据库中,它可以让您在保存之前管理对象。
例如:
class UserForm(forms.ModelForm):
...
def save(self):
# Sets username to email before saving
user = super(UserForm, self).save(commit=False)
user.username = user.email
user.save()
return user
如果先保存,请不要使用commit=False
,它会保存两次,代表更多的数据库操作。
在你的情况下,我认为你可以使用post_save信号,看看here