在Django管理界面中,有没有办法复制项目?

时间:2008-10-07 23:23:11

标签: python django django-models django-admin

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

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

3 个答案:

答案 0 :(得分:97)

您只需启用将其添加到您的ModelAdmin即可save as

save_as = True

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

答案 1 :(得分:4)

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

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

来自他们的自述文件:

  

Django Admin具有save_as功能,可为您添加新按钮   更改页面以保存该对象的新实例。

     

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

     

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

答案 2 :(得分:0)

您也可以应用此方法: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)