django admin 中的重复事件操作

duplicate events action in django admin

我的 django admin.py 中有一个重复记录功能,并且在某种程度上它可以工作,但奇怪的是我必须在 modelAdmin 的外部和内部复制这个功能...

def duplicate_event(ModelAdmin, request, queryset):
    for object in queryset:
        object.id = None
        object.save()
    duplicate_event.short_description = "Duplicate selected record"

class ProductAdmin(ImageCroppingMixin, admin.ModelAdmin):
    model = Product
    inlines = [CompositionAssociactionAdmin]
    list_display = ("image_img", "code", "name", "price", "discount", "price_offer", "prompt_delivery", "delivery", "promo", "active")
    list_editable = ('active',)
    fields = (
                ("name", "code"), 
                ("price", "discount", "price_offer"),
                ("color", "material"),
                ("scarpemisura", "cintureLunghezza"),
                "size",
                ("width", "lenght", "depth", "height"),
                "volume",
                "descrizione", "album",
                "image", "slider", "thumb", "thumbdue", "croplibero",
                ("prompt_delivery", "delivery"),
                ("slide", "promo"),
                "tags", "active", "pub_date"
            )
    def duplicate_event(ModelAdmin, request, queryset):
        for object in queryset:
            object.id = None
            object.save()
        duplicate_event.short_description = "Duplica Record Selezionati"

    actions = ['duplicate_event']

在我简单地尝试之前:

def duplicate_event(ModelAdmin, request, queryset):
    for object in queryset:
        object.id = None
        object.save()
    duplicate_event.short_description = "Duplicate selected record"

class ProductAdmin(ImageCroppingMixin, admin.ModelAdmin):
    model = Product
    inlines = [CompositionAssociactionAdmin]
    list_display = ("image_img", "code", "name", "price", "discount",  "price_offer", "prompt_delivery", "delivery", "promo", "active")
    list_editable = ('active',)
    fields = (
                ("name", "code"), 
                ("price", "discount", "price_offer"),
                ("color", "material"),
                ("scarpemisura", "cintureLunghezza"),
                "size",
                ("width", "lenght", "depth", "height"),
                "volume",
                "descrizione", "album",
                "image", "slider", "thumb", "thumbdue", "croplibero",
                ("prompt_delivery", "delivery"),
                ("slide", "promo"),
                "tags", "active", "pub_date"
            )

    actions = ['duplicate_event']

但我没有任何动作。

所以我尝试了另一种方式:

class ProductAdmin(ImageCroppingMixin, admin.ModelAdmin):
    model = Product
    inlines = [CompositionAssociactionAdmin]
    list_display = ("image_img", "code", "name", "price", "discount", "price_offer", "prompt_delivery", "delivery", "promo", "active")
    list_editable = ('active',)
    fields = (
                ("name", "code"), 
                ("price", "discount", "price_offer"),
                ("color", "material"),
                ("scarpemisura", "cintureLunghezza"),
                "size",
                ("width", "lenght", "depth", "height"),
                "volume",
                "descrizione", "album",
                "image", "slider", "thumb", "thumbdue", "croplibero",
                ("prompt_delivery", "delivery"),
                ("slide", "promo"),
                "tags", "active", "pub_date"
            )

    def duplicate_event(ModelAdmin, request, queryset):
        for object in queryset:
            object.id = None
            object.save()
        duplicate_event.short_description = "Duplica Record Selezionati"

    actions = ['duplicate_event']

我得到这个错误: 全局名称'duplicate_event'未定义

你的缩进级别不对,应该是:

class ProductAdmin(ImageCroppingMixin, admin.ModelAdmin):
    def duplicate_event(ModelAdmin, request, queryset):
        for object in queryset:
            object.id = None
            object.save()
    duplicate_event.short_description = "Duplica Record Selezionati"

分配 duplicate_event.short_description 的最后一行应该是 class 主体的一部分,而不是方法主体的一部分。全局函数是不必要的。