【问题标题】:In the Django admin interface, is there a way to duplicate an item?在 Django 管理界面中,有没有办法复制一个项目?
【发布时间】:2010-09-15 21:35:34
【问题描述】:

只是想知道是否有一种简单的方法可以在管理界面中添加复制现有列表的功能?

在数据输入中,我们遇到了很多商品与另一个商品共享通用数据的情况,为了节省时间,快速复制现有列表并仅更改更改的数据会非常好。使用更好的模型结构将是减少数据重复的一种方法,但将来可能会出现重复数据需要单独更改的情况。

【问题讨论】:

    标签: python django django-models django-admin


    【解决方案1】:

    您可以 save as 将其添加到您的 ModelAdmin:

    save_as = True
    

    这用“另存为”按钮替换了“保存并添加另一个”按钮。 “另存为”表示对象将保存为新对象(具有新 ID),而不是旧对象。

    【讨论】:

    • 这个实现对我来说并不明显,我发现another question's section titled 'Sample admin.py' 表明您需要从 ModelAdmin 派生,然后使用 admin.site.register(Person, PersonAdmin)(如果 PersonAdmin 是您的派生类)而不是使用 @ 987654325@
    【解决方案2】:

    这里有一个更好的(但不是内置的)解决方案:

    https://github.com/RealGeeks/django-modelclone

    来自他们的自述文件:

    Django Admin 有一个 save_as 功能,可以为您的 更改页面以保存该对象的新实例。

    我不喜欢这个功能的工作方式,因为你会保存一个 原始对象的相同副本(如果您没有得到验证 错误)一旦您单击该链接,并且如果您忘记 您想要在新对象中进行的小更改最终会得到一个 现有对象的副本。

    另一方面,django-modelclone 提供了一个中间视图,即 基本上为您预先填写表格。所以你可以修改然后保存 一个新的实例。或者直接离开而没有副作用。

    【讨论】:

      【解决方案3】:

      你也可以应用这个方法:https://stackoverflow.com/a/4054256/7995920

      在我的情况下,在“名称”字段中具有唯一约束,此操作有效,并且可以从任何形式请求:


      def duplicate_jorn(modeladmin, request, queryset):
          post_url = request.META['HTTP_REFERER']
      
          for object in queryset:
              object.id = None
              object.name = object.name+'-b'
              object.save()
      
          return HttpResponseRedirect(post_url)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-17
        • 2022-01-03
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 2020-04-16
        相关资源
        最近更新 更多