传统的save_model是写在ModelAdmin里面的:
@admin.register(BaoGao)
class BaoGaoAdmin(admin.ModelAdmin):
list_display = (
'name', 'baoxiu_date', 'paigong_date', 'update_date', 'show', 'price', 'image_data', 'author', 'cengji',
'state')
list_display_links = ('name',) # 设置需要添加<a>标签的字段
exclude = ['name', 'baoxiu_date', 'paigong_date', 'update_date', 'author', 'cengji', 'state']
list_per_page = 50 # 控制每页显示的对象数量,默认是100
def save_model(self, request, obj, form, change):
obj.author = request.user
super().save_model(request, obj, form, change)
如果对BaoGaoAdmin添加内联的话,需要先进行这样配置:
class ShenPiInline(admin.TabularInline): # 内联
model = ShenPi
extra = 0
@admin.register(BaoGao)
class BaoGaoAdmin(admin.ModelAdmin):
list_display = (
'name', 'baoxiu_date', 'paigong_date', 'update_date', 'show', 'price', 'image_data', 'author', 'cengji',
'state')
list_display_links = ('name',) # 设置需要添加<a>标签的字段
exclude = ['name', 'baoxiu_date', 'paigong_date', 'update_date', 'author', 'cengji', 'state']
list_per_page = 50 # 控制每页显示的对象数量,默认是100
inlines = [ShenPiInline]
def save_model(self, request, obj, form, change):
obj.author = request.user
super().save_model(request, obj, form, change)
对内联模型使用save_model,会发现TabularInline根本没有save_model方法,如果在ModelAdmin里面,使用obj根本调用不出来修改的内联数据。
接下来遇到的参数:
- obj:父对象在编写内容
- change:当前执行的状态,二次保存时为修改数据True,
- form:父对象Html源码
- formsets:内联对象Html源码
- instance:内联对象的obj
# 未达到实验目的
def save_related(self, request, form, formsets, change):
form.save_m2m()
for formset in formsets:
self.save_formset(request, form, formset, change=change)
# 如果直接 print(formset) 会发现里面就是每个内联对象的html代码
# 根据我个人测试,并没有发现 save_related 能够对内联函数修改项内容输出
# 达到实验目的
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
if instance.active == '同意' and change:
if instance.author.price >= instance.name.price:
instance.name.state = '已通过'
# print(instance.name.state)
instance.name.save()
else:
try:
temp = Cengji.objects.get(rank=instance.author.rank + 1)
_ShenPi = ShenPi(name=instance.name, author=temp)
_ShenPi.save()
except:
pass
if instance.active == '不同意' and change:
instance.name.state = '不同意'
instance.name.save()
# print(instance.author.rank)
# print(instance.name.price)
instance.save()
# instance 可以直接显示内联每个对象的参数值,
# 用for循环遍历每个 instance ,可以查看每个内联对象
内联对象其他继承:
# 内联对象其他继承
class ShenPiInline(admin.TabularInline):
model = ShenPi
extra = 0
# 内联页面,是否能够添加新的内敛对象
def has_add_permission(self, request, obj=None):
return False
# 当前这个内联对象,是否能够进行修改
def has_change_permission(self, request, obj=None):
if obj.author == request.user:
return True