Django Formulare

Django, Flask, Bottle, WSGI, CGI…
Antworten
Peter1977
User
Beiträge: 86
Registriert: Mittwoch 4. September 2013, 14:59

Hallo,

Kennt einer ein gutes Tutorial für Django Formulare?

Will Verschiedene Einzelbegriffe in eine Datenbank eintragen.
Diese Einzelbegriffe kann man in folgende Gruppen zusammenfassen

Einheit (Stk,m,L,kg,...),Bezeichnung (Compact-Disc, DVD, Blue-Ray, ....)

Diese werden auch in eine Tabelle geschrieben mit folgenden Spalten

Ident, Name, Gruppe

Früher kein Problem ein PHP Skript mit Namen 'eingabe.php' erstellt

Der Aufruf war dann

Code: Alles auswählen

<a href=eingabe.php?gruppe=einheit>Einheit</a>
eingabe.php sah dann wie folgt aus

Code: Alles auswählen

<?PHP
$Gruppe=$_GET['gruppe']
if  ($_POST)
	Daten in die Tabelle schreiben
	
<form action=eingabe.php?gruppe=$Gruppe method=POST>
Eingabe: <input type=text name=name>
<input type=submit>
</form>

Datenbank Lesen
und Daten in Tabellen Form Ausgeben
?>
der Code ist hier nicht Richtig ist nur Symbolisch

Wie geht dies in Django?
mfg Peter
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Hast Du schon das offizielle Django-Tutorial durchgearbeitet?
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Wie geht dies in Django?
Steht sowohl im Tutorial als auch in der (sehr) ausführlichen Doku von Django. Wenn du ein 2. Tutorial brauchst: das https://tutorial.djangogirls.org/de/ Tutorial ist auch sehr gut, auch für Boys. Da gibt es ebenfalls ein Kapitel zu Forms.

Wenn du konkretere Fragen hast gerne nochmal hier melden, am besten mit konkretem Code.

Gruß, noisefloor
Benutzeravatar
frogi001
User
Beiträge: 15
Registriert: Samstag 17. März 2018, 00:35

Hallo,
wenn ich es richtig verstanden habe, verarbeitet die eingabe.php sowohl GET als auch POST Methode.
Wenn Daten per GET übertragen werden, dann wird ein Formular angezeigt, das wiederum bereits
eine Variable ( in diesem Fall <gruppe> ) vorbelegt hat.
Bei Übertragung per POST werden Daten in die DB geschrieben. Wenn das so ist, dann:

Code: Alles auswählen

def eingabe(request):
	if request.method == GET:
		... Formular erstellen ...
		<form action='eingabe' ... >
		mit einem
		<input type='hidden' ... value='Wert aus GET'> ...
		
	if request.method == POST:
		... Werte in DB schreiben ...
Viele Grüße
HS
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Du erstellst dir erst ein Model mit den Attributen wie Einheit, Bezeichnung und was du noch so alles persistieren möchtest in deiner models.py.

Code: Alles auswählen

class DeinModel(models.Model):
    einheit = models.IntegerField()
    bezeichnung = models.CharField(max_length=200)
Dann erstellst du eine Formularklasse in deinen forms.py

Code: Alles auswählen

class DeinFormular(forms.Form):
	einheit = forms.IntegerField(label="Einheit", required=True)
	bezeichnung =  forms.CharField(label="bezeichnung", max_length=100, required=True)
   

Dann gibst du einen Endpunkt für deine Funktion in der urls.py an (sofern alles nach dem / an deine app weitergeleitet wird):

Code: Alles auswählen

path('dein_form_endpunkt/', views.dein_form_endpunkt, name='dein_form_endpunkt'),
Dann kannst du in deiner views.py deine Funktion bauen, was ungefähr wie folgt aussehen kann:

Code: Alles auswählen

def dein_form_endpunkt(request):
    if request.method == "POST":
        form = DeinFormular(data=request.POST)
        if form.is_valid():
            einheit = form.cleaned_data['einheit']
            bezeichnung = form.cleaned_data['bezeichnung']
            dein_neues_datenobjekt = DeinModel(einheit=einheit, bezeichnung=bezeichnung)
            dein_neues_datenobjekt.save()
            form = DeinFormular()
    else:
        form = DeinFormular()  
    action_endpoint = "/dein_form_endpunkt/"                     
    return render(request, "deine_app/forms.html", {"form": form, "action_endpoint": action_endpoint})   
dein forms.html muss natürlich noch deine form anzeigen (mit bootstrap angereichert und mit cripy forms dargestellt):

Code: Alles auswählen

{% extends 'deine_app/base.html' %}
{% block content %}
{% load crispy_forms_tags %} 

<div class="container mt-5">
    <div class="row justify-content-md-center">
        <div class="col col-lg-4">
            <h2 class="mb-5">Das ist dein Formular</h2>
            <form method="POST" class="form-group" action="{{action_endpoint}}">
                {% csrf_token %}
                {{ form|crispy }} 
                <input type="submit" class="btn btn-secondary" value="Bestätigen"> 
            </form>
        </div>    
    </div>
</div>        

{% endblock %}

schau hier mal TechWithTim: https://www.youtube.com/watch?v=vM9mcWr1RMg
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Antworten