W interfejsie administracyjnym Django, czy istnieje sposób, aby powielić element?

głosy
49

Po prostu zastanawiasz się, jeśli istnieje łatwy sposób na dodanie funkcjonalności do powielić istniejącego ogłoszenia w interfejsie administratora?

W wprowadzania danych jakie napotkasz sytuacji, w której wiele elementów udostępniania danych rodzajowe z innej pozycji, aby zaoszczędzić czas i byłoby bardzo miło szybko powielić istniejący oferty i tylko zmieniają zmienionych danych. Korzystanie z lepszą strukturę modelu byłoby jednym ze sposobów ograniczenia powielania danych, ale może być sytuacja, w której potrzebuje powielone dane mają być zmieniane indywidualnie w przyszłości.

Utwórz 08/10/2008 o 00:23
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
84

Można zapisać jako po prostu umożliwiające dodanie tego do swojej ModelAdmin:

save_as = True

Zastępuje „Zapisz i dodaj kolejny” przycisk z „Zapisz jako” przycisk. „Zapisz jako” oznacza, że ​​obiekt zostanie zapisany jako nowy obiekt (z nowym ID), zamiast starego obiektu.

Odpowiedział 08/10/2008 o 00:26
źródło użytkownik

głosy
0

Jest lepiej (ale nie wbudowane) rozwiązanie tutaj:

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

Z ich README:

Django Admin posiada save_asfunkcję, która dodaje nowy przycisk do zmiany strony, aby zapisać nową instancję tego obiektu.

Nie podoba mi się sposób, w jaki ta funkcja działa, ponieważ można zaoszczędzić identyczną kopię oryginalnego obiektu (jeśli nie pojawiają się błędy walidacji) jak najszybciej po kliknięciu tego łącza, a jeśli zapomnisz zrobić małe zmiany, które chciał w nowym obiekcie będzie w końcu z duplikatu istniejącego obiektu.

Z drugiej strony, Django-modelclone oferuje pośrednią zdaniem zasadniczo wstępnie wypełnia formularz dla Ciebie. Więc można modyfikować, a następnie zapisać nową instancję. Albo po prostu odejść bez skutków ubocznych.

Odpowiedział 10/04/2018 o 11:10
źródło użytkownik

głosy
0

Można również zastosować tę metodę: https://stackoverflow.com/a/4054256/7995920

W moim przypadku, z unikalną przymusu „Imię” pola, działanie to działa i można zamówić w dowolnej formie:


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)

Odpowiedział 12/06/2019 o 19:04
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more