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 11:26:55 浏览: 12
这段代码是一个 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() 方法,它将在保存对象之前执行一些额外的逻辑,如果需要可以取消注释。
优化这段代码 @property def file_display(self, obj): return obj.file_instance.content_type
如果你想进一步优化这段代码,可以考虑使用 `@property` 装饰器将 `file_display` 方法转换为属性,而不是方法。这样可以使代码更简洁和易读。以下是优化后的代码示例:
```python
from django.contrib import admin
class MyModelAdmin(admin.ModelAdmin):
list_display = ('file_display',)
@property
def file_display(self):
return self.my_file.file.content_type
file_display.short_description = 'File Type'
admin.site.register(MyModel, MyModelAdmin)
```
在上面的代码中,我们使用 `@property` 装饰器将 `file_display` 方法转换为属性。然后,我们可以直接在 `list_display` 中引用该属性,并将其添加到展示列表中。
通过这种方式,我们可以简化代码并提高代码的可读性。注意,在使用 `@property` 装饰器时,不需要将 `self` 作为参数传递给属性方法,因为它被视为类的属性。