Django: "Übergabe" eines Requests an einen andern View

Django, Flask, Bottle, WSGI, CGI…
Antworten
skirnir
User
Beiträge: 33
Registriert: Sonntag 25. Januar 2015, 10:59

Hallo,

ich habe ein Django-Projekt, bei dem die Möglichkeit bestehen soll, zusätzlich
zur händischen Eingabe von Datensätzen auch Dateien im JSON-Format einzulesen und
daraus ein Formular zu befüllen, das dem User vorgelegt wird, damit er vor dem
Speichern eines Datensatzes noch Änderungen vornehmen kann.
Für alle diese Models existieren bereits List-, Detail-, und CreateViews.

Code: Alles auswählen

class JsonUploadView(View):
    """
    Parse a JSON file and display a form for appropriate model
    """
    def post(self, request):
        object_dispatcher = {
            MyModel: {'form': MyModelForm,
                      'create_url': 'myapp:mymodel-upload'},
            MyOtherModel: {'form': MyOtherModelForm,
                      'create_url': 'myapp:myothermodel-upload'},
            # ...
        }
        uploaded_file = request.FILES['message_file']
        json_text = uploaded_file.read().decode('utf8')
        json_object = json.loads(str(json_text))
        object = handle_json_message(json_object) # <- Hier kommt eine Instanz eines Models zurück
        object_dict = model_to_dict(object)
        form = object_dispatcher[type(object)]['form'](object_dict)
        create_url = reverse(object_dispatcher[type(object)]['create_url'])
        return render(request, 'myapp/json_form.html', context={'form': form, 'create_url': create_url})
Ich würde eigentlich gern einfach nur die JSON-Datei parsen (also bis Zeile 16 bzw. 17) und das resultierende
Objekt an einen CreateView übergeben, weil ich mir dadurch sowohl die Forms als auch
das zusätzliche Template sparen könnte, habe aber keine Möglichkeit dazu gefunden.

Gibt es einen einfacheren und idiomatischeren Weg, das zu lösen?
Antworten