slogan3

Help me een aangepaste Django admin-actie implementeren voor batchverwerking van gegevens.

description

Door het implementeren van deze aangepaste admin-actie kan ik mijn workflows stroomlijnen, repetitieve taken verminderen en de algehele efficiëntie in het beheer van gegevens verbeteren.

prompt

try_prompt

Ik wil een aangepaste actie maken in de Django admin-interface waarmee ik meerdere records kan selecteren en een specifieke bewerking op hen kan uitvoeren. Beschrijf mijn huidige admin-con ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Om een aangepaste actie in de Django admin-interface te maken waarmee je meerdere records kunt selecteren en een bewerking kunt uitvoeren, kun je de volgende stappen volgen: 1. Definieer een functie voor de actie, bijvoorbeeld het verwijderen van geselecteerde records. 2. Voeg deze actie toe aan de `actions`-lijst in je admin-klasse. Hier is een voorbeeld van hoe je dit kunt implementeren voor je `Product` model: ```python from django.contrib import admin from .models import Product def verwijder_geselecteerde_producten(modeladmin, request, queryset): queryset.delete() # Optioneel: bericht tonen modeladmin.message_user(request, f"{queryset.count()} producten verwijderd.") class ProductAdmin(admin.ModelAdmin): list_display = ('titel', 'prijs', 'voorraad') actions = [verwijder_geselecteerde_producten] admin.site.register(Product, ProductAdmin) ``` Met deze configuratie kunnen beheerders meerdere producten selecteren en de actie "Geselecteerde producten verwijderen" uitvoeren. Wil je een andere bewerking toevoegen, zoals het bijwerken van een status of exporteren, dan maak je een vergelijkbare functie en voeg je die toe aan de `actions`-lijst.
provider: deepseek
model: deepseek-chat
Hier is hoe je een aangepaste bulk-actie kunt maken in de Django admin om geselecteerde producten te verwijderen: ## Stap 1: Maak de aangepaste admin actie Voeg dit toe aan je `admin.py` bestand: ```python from django.contrib import admin from django.http import HttpResponseRedirect from django.contrib import messages from .models import Product def delete_selected_products(modeladmin, request, queryset): """ Aangepaste actie om geselecteerde producten te verwijderen """ try: count = queryset.count() queryset.delete() messages.success(request, f'{count} product(en) succesvol verwijderd.') except Exception as e: messages.error(request, f'Fout bij verwijderen: {str(e)}') delete_selected_products.short_description = "Geselecteerde producten verwijderen" @admin.register(Product) class ProductAdmin(admin.ModelAdmin): list_display = ['titel', 'prijs', 'voorraad'] list_filter = ['voorraad'] search_fields = ['titel'] # Voeg de aangepaste actie toe actions = [delete_selected_products] ``` ## Stap 2: Alternatieve geavanceerde versie (met bevestiging) Voor een veiligere implementatie met bevestiging: ```python def delete_selected_with_confirmation(modeladmin, request, queryset): """ Verwijder geselecteerde producten met bevestiging """ if request.POST.get('post'): # Daadwerkelijke verwijdering count = queryset.count() queryset.delete() messages.success(request, f'{count} product(en) succesvol verwijderd.') return None else: # Toon bevestigingspagina from django.contrib.admin.helpers import ActionForm from django import forms from django.template.response import TemplateResponse class ConfirmDeleteForm(ActionForm): confirm = forms.BooleanField( required=True, label="Bevestig verwijdering", help_text="Weet u zeker dat u deze producten wilt verwijderen?" ) context = { 'title': 'Bevestig verwijdering', 'queryset': queryset, 'action_checkbox_name': admin.helpers.ACTION_CHECKBOX_NAME, 'form': ConfirmDeleteForm(), 'opts': modeladmin.model._meta, } return TemplateResponse(request, 'admin/confirm_bulk_delete.html', context) delete_selected_with_confirmation.short_description = "Verwijder geselecteerde producten (met bevestiging)" ``` ## Stap 3: Maak template voor bevestiging (optioneel) Maak een template `templates/admin/confirm_bulk_delete.html`: ```html {% extends "admin/base_site.html" %} {% block content %} <h1>Bevestig bulk verwijdering</h1> <p>U staat op het punt om de volgende {{ queryset.count }} product(en) te verwijderen:</p> <ul> {% for product in queryset %} <li>{{ product.titel }} - €{{ product.prijs }}</li> {% endfor %} </ul> <form method="post"> {% csrf_token %} {{ form.as_p }} <input type="hidden" name="post" value="yes"> <input type="submit" value="Verwijderen bevestigen" class="default"> <a href="../" class="button cancel-link">Annuleren</a> </form> {% endblock %} ``` ## Gebruik in de admin: 1. Ga naar de productenlijst in de admin 2. Selecteer de gewenste producten met de checkboxes 3. Kies "Geselecteerde producten verwijderen" uit de actie-dropdown 4. Klik op "Uitvoeren" ## Belangrijke opmerkingen: - De standaard Django admin heeft al een "Verwijder geselecteerde [objecten]" actie - Deze aangepaste versie geeft je meer controle over het proces - Je kunt de actie aanpassen voor andere bulk-operaties (prijzen bijwerken, voorraad aanpassen, etc.) - Zorg voor goede foutafhandeling bij productiegebruik Wil je dat ik andere bulk-acties toevoeg, zoals voorraad bijwerken of prijzen aanpassen?