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

StackOverflow https://stackoverflow.com/questions/180809

Вопрос

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

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

Это было полезно?

Решение

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

save_as = True

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

Другие советы

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

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

Из их README:

  

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

     

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

     

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

Вы также можете применить этот метод: https://stackoverflow.com/a/4054256/7995920

В моем случае, с уникальным ограничением в поле '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)
<Ч>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top