代码之家  ›  专栏  ›  技术社区  ›  Dave Merwin

创建Django管理操作以复制记录

  •  4
  • Dave Merwin  · 技术社区  · 14 年前

    这是用例。

    管理员从管理操作下拉菜单中选择“复制”。 Django admin创建一个具有新id的重复记录。 页面被重新压缩,并添加新的id副本。 管理员点击新的,重复的记录,并编辑它。

    我是疯了还是这是一个很直接的管理行为?

    我一直在参考这些文件: http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/

    在我的应用程序中:

    def duplicate(modeladmin, request, queryset):
        new = obj.id
        queryset.create(new)
        return None
    duplicate.short_description = "Duplicate selected record"
    

    我知道这不对。。。但我的想法接近了吗?

    2 回复  |  直到 14 年前
        1
  •  14
  •   Jeff Triplett    14 年前

    您有正确的想法,但是您需要遍历queryset,然后复制每个对象。

    def duplicate_event(modeladmin, request, queryset):
        for object in queryset:
            object.id = None
            object.save()
    duplicate_event.short_description = "Duplicate selected record"
    
        2
  •  0
  •   Pjl    10 年前

    也许这对你有用。

    def duplicate_query_sets(queryset, **kwargs):
        for p in queryset:
            p.pk = None
            for i, v in kwargs.iteritems():
                setattr(p, i, v)
    
            p.save()