我使用 Django 1.11.10 和 python 3.6;我想在管理面板中创建
Item
模型并在同一页面添加多个 File
模型,所以我使用 TabularInline
。问题是在保存 File
模型之前,我需要填写一些其他字段,例如上传文件的 size
。如果我在课堂上使用 admin.ModelAdmin
,那么 save_model
会起作用,但它不适用于 admin.TabularInline
。
class Item(models.Model):
title = models.CharField()
class File(models.Model):
name = models.CharField()
size = models.PositiveIntegerField()
file = models.FileField(upload_to='x/')
----
class FileForm(forms.ModelForm):
class Meta:
model = File
fields = ['name', 'file']
def clean(self):
cleaned_data = super().clean()
file = cleaned_data.get('file')
self.size = file.size # file.size shows correct result
class FileInline(admin.TabularInline):
model = File
form = FileForm
def save_formset(self, request, form, formset, change):
logger.info('-- does not get here --')
formset.save_m2m()
def save_model(self, request, obj, form, change):
logger.info('-- does not get here --')
obj.size = form.size
super(FileInline, self).save_model(request, obj, form, change)
class ItemAdmin(admin.ModelAdmin):
inlines = [FileInline]
admin.site.register(Item, ItemAdmin)
查看保存相关
我相信这就是你所需要的
这是一篇旧文章,但我发现了一些有用的东西。将其添加到此处,因为这是第一个搜索结果。
下面的代码在保存表格数据之前更新
created_by
字段。
def save_formset(self, request, obj, formset, change):
instances = formset.save(commit=False)
for instance in instances:
instance.created_by = request.user
instance.save()
formset.save()
顺便说一句,它需要添加到您的 ModelAdmin 中,而不是 TabularInline。