Подтвердить что ты не робот

В интерфейсе администратора Django существует ли способ дублировать элемент?

Просто интересно, есть ли простой способ добавить функциональность для дублирования существующего списка в интерфейсе администратора?

При вводе данных мы столкнулись с ситуацией, когда многие элементы обмениваются общими данными с другим элементом, и для экономии времени было бы очень приятно быстро дублировать существующий список и изменять только измененные данные. Использование лучшей структуры модели было бы одним из способов сокращения дублирования данных, но может возникнуть ситуация, когда дублирующиеся данные должны быть изменены на индивидуальной основе в будущем.

4b9b3361

Ответ 1

Вы можете сохранить как, просто добавив это в свой ModelAdmin:

save_as = True

Это заменяет кнопку "Сохранить и добавить еще" кнопкой "Сохранить как". "Сохранить как" означает, что объект будет сохранен как новый объект (с новым идентификатором), а не старый объект.

Ответ 2

Здесь есть лучшее (но не встроенное) решение:

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

Из их README:

В Django Admin есть функция save_as которая добавляет новую кнопку на страницу изменений, чтобы сохранить новый экземпляр этого объекта.

Мне не нравится, как эта функция работает, потому что вы сохраните идентичную копию исходного объекта (если вы не получите ошибок проверки), как только вы нажмете эту ссылку, и если вы забудете внести небольшие изменения, которые вы В новом объекте вы получите дубликат существующего объекта.

С другой стороны, django-modelclone предлагает промежуточное представление, которое в основном предварительно заполняет форму для вас. Таким образом, вы можете изменить, а затем сохранить новый экземпляр. Или просто уйти без побочных эффектов.

Ответ 3

Вы также можете применить этот метод: fooobar.com/info/1770767/...

В моем случае, с уникальным ограничением в поле 'name', это действие работает и может быть запрошено из любой формы:


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)