Form zum Dokumentenupload mit Radio-Button-Optionen

Django, Flask, Bottle, WSGI, CGI…
Antworten
klara-f
User
Beiträge: 19
Registriert: Dienstag 5. August 2014, 07:34

Hallo djangorianer,

diesmal würde ich gerne einen Dokumentenupload realisieren, der gleichzeitig die Auswahl einer Radiobutton Alternative in die Datenbank schreibt. Hier hänge ich aber daran, wie ich das mit einem einzigen "Upload"-Button realisiere. Könnt ihr mir hier helfen? Ich zeige euch mal, was ich soweit habe, jeweils als Auszug:

models.py --> in modus soll das stehen, was der User im Radiobutton ausgewählt hat

Code: Alles auswählen

class Document(models.Model):
    docfile = models.FileField(upload_to='documents')
    modus = models.TextField()
forms.py --> in forms.py steht bisher noch nichts von meinen Radiobuttons... da weiß ich schon nicht so recht, was ich reinschreiben soll

Code: Alles auswählen

from django import forms

class DocumentForm(forms.Form):
    docfile = forms.FileField(
        label='Welche Datei soll bearbeitet werden?'
    )
views.py --> hier ist mein submit drin, aber noch nicht das, was der Radiobutton als Wert enthält --> weil ich nicht weiß, was rein soll

Code: Alles auswählen

from .models import Document
from .forms import DocumentForm

def meine_view(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Document(docfile = request.FILES['docfile'])
            newdoc.save()

            instance = Results.objects.filter(instance = str(newdoc.docfile))

            template = loader.get_template('my_template.html')
            context = RequestContext(request, {
                'instance': instance,
            })
            return HttpResponse(template.render(context))
    else:
       ...
    )
meine_seite.html --> vom Prinzip soll meine Seite so aussehen mit den Buttons --> aber wie verknüpfe ich alles zusammen?!

Code: Alles auswählen

<form action="{% url "meine_seite" %}" method="post" enctype="multipart/form-data">
	{% csrf_token %}
	<p>
		{{ form.docfile }}
	</p>
	<p>
	Wähle Option mit Radiobutton
	<br>
	 <input type="radio" name="option" value="A"> A <br> 
	 <input type="radio" name="option"  value="B"> B <br> 
	 <input type="radio" name="option"  value="C"> C <br>
	 <br>
	<input type="submit" value="Starten" /></p>
</form>
Über Hilfe würde ich mich sehr freuen!

klara!
Piet Lotus
User
Beiträge: 80
Registriert: Dienstag 14. November 2006, 10:40

Hallo klara-f,
da es mir wieder an Zeit mangelt, nur einige Denkanstöße, aber vielleicht helfen sie dir ja in die richtige Richtung, bzw. du müsstest das über die Stichworte hier noch mal genauer in der Django-Doku nachschauen.
Wenn ich dich richtig verstehe hast du eher Probleme mit den Radio-Buttons unabhängig von der Fileupload-Geschichte. Die ist praktisch nur der Rahmen, in denen du die Radio-Buttons verwenden möchtest.
Den Form-Fields kannst du das Attribut "widget" mitgeben. Damit kannst du das "Aussehen", als was das Feld in der HTML-Seite gerendert werden soll, bestimmen. Für "widget" kann man den Wert "RadioSelect" mitgeben, der wiederum über "choices" die Möglichkeit bietet die Auswahl der Radio-Felder vorzubelegen. Die Radio-Auswahl brauchst du dann nicht mehr selbst in die HTML-Seiten zu bringen, sondern kannst du über die geschweiften Klammern in den Templates automatisch gerendert bekommen. Und die Auswertung der Eingabe in deiner View erfolgt eigentlich wie üblich bei Forms.
Ich hoffe, das hilft, sonst meld dich wieder... :)
Viele Grüße
Piet
klara-f
User
Beiträge: 19
Registriert: Dienstag 5. August 2014, 07:34

Hallo Piet Lotus,

es klappt und war ganz einfach. Das allereinzige was ich tun musst war:

Code: Alles auswählen

newdoc = Document(docfile = request.FILES['docfile'])
um

Code: Alles auswählen

newdoc = Document(docfile = request.FILES['docfile'], modus = request.POST['modus'])
zu ergänzen.

Damit wird das, was das Post im *.html überträgt, richtig interpretiert in Document und dann auch in die Datenbank geschrieben.

Viele Grüße und dank!
Klara!

PS: ich mache das ganze ja nur als Hobby und deshalb kommen meine Antworten auch immer sehr verzögert.
Antworten