Seite 1 von 1

Django Formulare

Verfasst: Samstag 7. August 2021, 18:59
von Peter1977
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

Re: Django Formulare

Verfasst: Samstag 7. August 2021, 20:15
von Sirius3
Hast Du schon das offizielle Django-Tutorial durchgearbeitet?

Re: Django Formulare

Verfasst: Sonntag 8. August 2021, 18:13
von noisefloor
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

Re: Django Formulare

Verfasst: Samstag 14. August 2021, 15:52
von frogi001
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 ...

Re: Django Formulare

Verfasst: Donnerstag 19. August 2021, 17:35
von naheliegend
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