【问题标题】:Django admin - how to save inlines?Django admin - 如何保存内联?
【发布时间】:2011-10-22 18:21:26
【问题描述】:

我需要在管理员中覆盖内联的保存方法。保存照片时,我需要将用户 ID 添加到 DB 列。我无法在模型中制作它,因为那里没有请求数据。我怎样才能在管理员中做到这一点,以某种方式获取 nad set user id?

【问题讨论】:

    标签: django django-admin inlines


    【解决方案1】:

    我相信你应该使用 ModelAdmin 上的 save_formset 方法:

    class ArticleAdmin(admin.ModelAdmin):
        def save_formset(self, request, form, formset, change):
            instances = formset.save(commit=False)
            for instance in instances:
                instance.user = request.user
                instance.save()
            formset.save_m2m()
    

    https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_formset

    【讨论】:

      【解决方案2】:

      我对 django (1.8) 比较陌生,并且使用上述覆盖:

      def save_formset(self, request, form, formset, change):
          instances = formset.save(commit=False)  # gets instance from memory and add to it before saving it
          for obj in formset.deleted_objects:
              obj.delete()
          for instance in instances:
              for form in formset:  # cleaned_data is only available on the form, so you have to iterate over formset
                  instance.modified_by = request.user
                  instance.created_by = request.user
                  instance.lowercase_enum_value_en = form.cleaned_data['enum_value_en'].lower()
                  instance.save()
          formset.save_m2m()
      

      即在保存实例和表单之前添加它,但是当用户输入 2 行时,它总是保存最后的cleaned_data['enum_value_en']。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-16
        • 2015-11-20
        相关资源
        最近更新 更多