Django Admin Refresh Intermediate Form im Admin

Django, Flask, Bottle, WSGI, CGI…
Antworten
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Hallo,

ich versuche mich derzeit am Django im Admin Bereich.
Funktioniert soweit auch ganz gut, allerdings schaffe ich kein update des forms auf einer intermediate page.

Auf der Intermediate Page, die der Admin Action folgt, ist ein Form mit einem DatePicker, dazu werden auf der Seite in abhängigkeit des
gewählten Datums die zu exportierenden Datensätze angezeigt.

Wenn nun das Datum geändert wird, und der User auf den Refresh button clickt soll
der User auf der Intermediate Page bleiben, bzw. diese neu geladen werden mit dem Datumsabhängigen Inhalt (Vorschau).

Erst mit Generate oder Abbrechen soll die seite verlassen werden.
Dummerweise führt auch der refresh button zur Admin-Liste zurück.

Was ist hier falsch?
Die <form action="" method="post"> ?
Allerdings habe ich ja für die Intermediate Page keine echte URL die verwendbar wäre.

Code: Alles auswählen

    def create_export(self, request, queryset):
        form = None
        dynamic_stuff = "DEFAULT"

        # check if the form is submitted as post and contains the correct form action
        if request.method == 'POST' and \
        ('cancel' in request.POST or 'generate' in request.POST or 'refresh' in request.POST):
            # create a form bound to the POST data - without form we cant render correctly
            form = CreateExportForm(request.POST)

            # check if the cancel button was clicked
            if 'cancel' in request.POST:
                self.message_user(request, 'export abgebrochen')
                return HttpResponseRedirect(request.get_full_path())

            # check if the refresh html button was clicked
            if 'refresh' in request.POST:
                if form.is_valid(): # All validation rules pass
                    # Process the data in form.cleaned_data
                    date_selection = form.cleaned_data['selected_date']
                    if date_selection == SOME_DATE:
                        dynamic_stuff = "dynamic blah"


            # check if the create button was clicked
            if 'generate' in request.POST:
                if form.is_valid(): # All validation rules pass
                    pass

        else:
            # An unbound form
            form = CreateExortForm(initial={'_selected_action': request.POST.getlist(admin.ACTION_CHECKBOX_NAME)})

        # always render a response
        return render_to_response('admin/create_export.html', {
                        'form': form,
                        'dynamic_stuff' : dynamic_stuff},
                        context_instance=RequestContext(request))

Code: Alles auswählen

[...]
{{ form }}
<br>

{{ dynamic_stuff }}

<form action="" method="post">
    {% csrf_token %}
    <input type="hidden" name="action" value="create_export" />
    <input type="submit" name="cancel" value="Abbrechen" />
    <input type="submit" name="generate" value="erstellen" />
    <input type="submit" name="refresh" value="Aktualisieren" />
</form>
[...]
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Ist _selected_action immer mitgeschickt? Siehe: https://github.com/django/django/blob/m ... L1434-1439 ff
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Hi,

nein, die selected_action (was scheinbar die keys der gewählten zeilen / objekte sind) ist beim refresh nicht dabei,
beim ersten besuchen der intermediate page allerdings schon..

Im original Post (Liste -> zwischenseite sieht das so aus):
_selected_action=12349
_selected_action=12300

Im refresh ist die nicht dabei.

Ich glaube das ist der entscheidende hinweis.
{{ form }} muss innerhalb des html <form> tags sein, sonst fehlen die _selected_actions.

Ich probier das heute abend gleich mal aus.

Danke schonmal.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Ja genau das war das Problem, damit ist es gelöst. :)
Antworten