def save_model(self,request,obj,form,change): obj.owner=request.user 当中obj.save() 与return super(LinkAdmin,self).save_model(request,obj,form,change)的区别
时间: 2024-04-21 12:26:55 浏览: 122
这段代码是一个 Django 后端框架的代码段,用于在保存 LinkAdmin 对象时,将对象的所有者设置为当前请求的用户,并将对象保存。
`obj.save()` 是保存 LinkAdmin 对象,并将对象的所有者设置为当前请求的用户。这行代码只是保存对象,没有调用父类的方法。这意味着如果父类的方法中有一些重要的逻辑,如果不调用父类的方法,这些逻辑将不会被执行。
`super().save_model(request, obj, form, change)` 是调用父类的 save_model() 方法,并将 request、obj、form 和 change 作为参数传递给它。这个方法将在保存对象之前执行一些额外的逻辑,比如在保存对象之前进行一些权限检查、设置一些默认值等。它也会保存对象并将对象的所有者设置为当前请求的用户。
因此,如果你只想简单地将对象的所有者设置为当前请求的用户并保存对象,你可以只使用 `obj.save()`。如果你需要执行更多的逻辑,如权限检查和设置默认值,你应该调用父类的 save_model() 方法。
相关问题
def save_model(self,request,obj,form,change): obj.owner=request.user obj.save() #return super(LinkAdmin,self).save_model(request,obj,form,change)
这是一个 Django 后端框架的代码段,用于在保存 LinkAdmin 对象时,将对象的所有者设置为当前请求的用户,并将对象保存。其中,request 是当前请求对象,obj 是要保存的 LinkAdmin 对象,form 是用于保存 LinkAdmin 对象的表单,change 是一个布尔值,表示是否是在修改已存在的对象。注释掉的那一行代码是调用父类的 save_model() 方法,它将在保存对象之前执行一些额外的逻辑,如果需要可以取消注释。
class StaffInfoAdmin(admin.ModelAdmin): inlines = [EmergencyInline, BackgroundInline, WorkInline, FamilyInline] search_fields = ['NAME', 'RES_ID'] list_display = ['NAME', 'BIRTH', 'RES_ID'] list_filter = ['POST'] def clean_fields(self, request, obj): mobile_pattern = re.compile(r'^1[3456789]\d{9}$') if not re.match(mobile_pattern, obj.TEL): raise ValidationError("请输入11位电话号码,且不包含'-'") super().clean_fields(request, obj)代码如上,但是没有完成合法性检查的功能,电话号码输入123依旧可以提交数据
根据你提供的代码,可以看出在`clean_fields`函数中进行了电话号码的合法性检查,但是这个函数并没有被调用。为了实现这个功能,你需要在`save_model`函数中手动调用`clean_fields`函数。修改后的代码如下:
```
class StaffInfoAdmin(admin.ModelAdmin):
inlines = [EmergencyInline, BackgroundInline, WorkInline, FamilyInline]
search_fields = ['NAME', 'RES_ID']
list_display = ['NAME', 'BIRTH', 'RES_ID']
list_filter = ['POST']
def clean_fields(self, request, obj):
mobile_pattern = re.compile(r'^1[3456789]\d{9}$')
if not re.match(mobile_pattern, obj.TEL):
raise ValidationError("请输入11位电话号码,且不包含'-'")
super().clean_fields(request, obj)
def save_model(self, request, obj, form, change):
self.clean_fields(request, obj)
super().save_model(request, obj, form, change)
```
这样就可以在保存数据之前进行合法性检查了。
阅读全文