【问题标题】:Django admin: how to save_model() in TabularInline?Django 管理员:如何在 TabularInline 中保存模型()?
【发布时间】:2018-07-23 22:28:56
【问题描述】:

我使用 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)

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    看save_related

    我相信这是你需要的

    【讨论】:

      【解决方案2】:

      这是一篇旧帖子,但我发现了一些有用的东西。在此处添加它,因为这是第一个搜索结果。

      以下代码在保存表格数据之前更新 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-30
        • 2014-07-11
        • 2011-04-08
        • 2011-04-12
        • 2013-08-12
        • 2021-12-11
        • 2012-10-17
        • 2021-08-03
        相关资源
        最近更新 更多