【发布时间】:2010-09-15 21:35:34
【问题描述】:
只是想知道是否有一种简单的方法可以在管理界面中添加复制现有列表的功能?
在数据输入中,我们遇到了很多商品与另一个商品共享通用数据的情况,为了节省时间,快速复制现有列表并仅更改更改的数据会非常好。使用更好的模型结构将是减少数据重复的一种方法,但将来可能会出现重复数据需要单独更改的情况。
【问题讨论】:
标签: python django django-models django-admin
只是想知道是否有一种简单的方法可以在管理界面中添加复制现有列表的功能?
在数据输入中,我们遇到了很多商品与另一个商品共享通用数据的情况,为了节省时间,快速复制现有列表并仅更改更改的数据会非常好。使用更好的模型结构将是减少数据重复的一种方法,但将来可能会出现重复数据需要单独更改的情况。
【问题讨论】:
标签: python django django-models django-admin
您可以 save as 将其添加到您的 ModelAdmin:
save_as = True
这用“另存为”按钮替换了“保存并添加另一个”按钮。 “另存为”表示对象将保存为新对象(具有新 ID),而不是旧对象。
【讨论】:
admin.site.register(Person, PersonAdmin)(如果 PersonAdmin 是您的派生类)而不是使用 @ 987654325@
这里有一个更好的(但不是内置的)解决方案:
https://github.com/RealGeeks/django-modelclone
来自他们的自述文件:
Django Admin 有一个
save_as功能,可以为您的 更改页面以保存该对象的新实例。我不喜欢这个功能的工作方式,因为你会保存一个 原始对象的相同副本(如果您没有得到验证 错误)一旦您单击该链接,并且如果您忘记 您想要在新对象中进行的小更改最终会得到一个 现有对象的副本。
另一方面,django-modelclone 提供了一个中间视图,即 基本上为您预先填写表格。所以你可以修改然后保存 一个新的实例。或者直接离开而没有副作用。
【讨论】:
你也可以应用这个方法: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)
【讨论】: