JSONB Feld über wtforms füllen
@meego: es kommt darauf an, was Du möchtest. Oder allgemeiner, was ein typischer Programmierer möchte. Er möchte einen möglichst einfachen, gut wartbaren Code, der möglichst wenig Sonderfälle berücksichtigen muß. Und wenn man für jeden Wochentag mehrere Einträge zuläßt, ist sowohl die Abfrage, ob ein Geschäft geöffnet ist einfacher, als mit Morgens- und Nachmittags-Zeiten, als auch flexibler, weil man beliebig viele Pausen machen kann. Die nächste Erkenntnis hat Dich auch schon fast erreicht: Formulargeneratoren sind nur für wirklich simple Formulare ein Hilfe. Alles andere muß man individuell Programmieren.
- noisefloor
- User
- Beiträge: 4150
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
1. Du stellst im Formular nur 1x Wochentag, Öffnungszeit, Schlusszeit dar und man muss pro Laden dann im Zweifelsfall x mal das Formularausfüllen. Dann kannst du auch Wtforms nutzen.
2. Du gestaltest die Seite so, dass du beliebig viele Formularfilter via JS einblenden kannst. Dann macht Wtforms serverseitig dafür nicht wirklich Sinn.
Gruß, noisefloor
IMHO gibt's zwei Ansätze:Keine Ahnung allerdings, wie man sowas dann einfach im Frontend (wtforms) abbildet.
1. Du stellst im Formular nur 1x Wochentag, Öffnungszeit, Schlusszeit dar und man muss pro Laden dann im Zweifelsfall x mal das Formularausfüllen. Dann kannst du auch Wtforms nutzen.
2. Du gestaltest die Seite so, dass du beliebig viele Formularfilter via JS einblenden kannst. Dann macht Wtforms serverseitig dafür nicht wirklich Sinn.
Gruß, noisefloor
@Sirius: Ja, bei den Queries bin ich noch nicht angekommen und entsprechend unerfahren. Also kann man das nicht mehr weiter vereinfachen?
@Noisefloor: Leider kann ich noch kein js, der Syntax ist: fürchterlich. Aber mehrmals dieselbe Website ausfüllen, kann sicherlich nicht die elegante Lösung sein.
@Noisefloor: Leider kann ich noch kein js, der Syntax ist: fürchterlich. Aber mehrmals dieselbe Website ausfüllen, kann sicherlich nicht die elegante Lösung sein.
- noisefloor
- User
- Beiträge: 4150
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Gruß, noisefloor
Aber bei einem Webprojekt wie deinem ist es ziemlich unrealistisch, dass du ohne JS auskommst. Und jQuery & Co machen JS schon ziemlich erträglich.Leider kann ich noch kein js, der Syntax ist: fürchterlich.
Gruß, noisefloor
Bin jetzt zwar etwas weiter mit jQuery, allerdings bin ich mir nicht sicher, ob ich das so machen kann und dann irgendwie die Inputfelder an die DB weiterreicht (der Debugger beschwert sich auch schon mal, offenbar wegen den render_fields). Ich weiss auch nicht, ob ich dieser wtf-selectfields überhaupt über wtforms mehrmals gebrauchen kann. Was meint ihr dazu?:
Code: Alles auswählen
<script>
$("add_button").on('click', function() {
var $html_string.html('
<div class="row">
<div class="input-field col s3 m2">
{{ render_inputfield(form.day) }}
</div>
<div class="input-field col s3 m2 l1">
<input type="text" name="time1" id="time_field" class="time" data-time-format="H:i" />
<label for="time1">{{ _('von') }}</label>
</div>
<div class="input-field col s3 m2 l1">
<input type="text" name="time2" id="time_field" class="time" data-time-format="H:i" />
<label for="time2">{{ _('bis') }}</label>
</div>
<div class="input-field col s3 m2 l1">
<input type="text" name="time3" id="time_field" class="time" data-time-format="H:i" />
<label for="time3">{{ _('von') }}</label>
</div>
<div class="input-field col s3 m2 l1">
<input type="text" name="time4" id="time_field" class="time" data-time-format="H:i" />
<label for="time4">{{ _('bis') }}</label>
</div>
<div class="input-field col s4 m4 l2">
<a class="btn-floating waves-effect waves-light" id="add_button"><i class="material-icons">add</i></a>
</div>
</div>
');
$('#openinghours').append($html_string);
});
</script>
@meego: Wo wird denn `$html_string` definiert und warum steht da ``var`` davor? Das dürfte syntaktisch falsch sein.
Wie ist `render_inputfield()` denn definiert?
Das `id`-Attribut muss dokumentweit *eindeutig* sein. Bei Dir ist `time_field` nicht einmal innerhalb des HTML-Fragments eindeutig und bei jedem Klick auf die Schaltfläche zum hinzufügen werden neue Fragmente in das Dokument gebracht bei denen IDs enthalten sind die es bereits gibt.
Wie ist `render_inputfield()` denn definiert?
Das `id`-Attribut muss dokumentweit *eindeutig* sein. Bei Dir ist `time_field` nicht einmal innerhalb des HTML-Fragments eindeutig und bei jedem Klick auf die Schaltfläche zum hinzufügen werden neue Fragmente in das Dokument gebracht bei denen IDs enthalten sind die es bereits gibt.
Das macro render_inputfield wird importiert und funktioniert ausserhalb des scripts.
Über die ids muss man sich wohl später Gedanken machen. Die Frage ist erst mal, ob das so überhaupt Sinn macht.
Code: Alles auswählen
<script>
$("add_button").on('click', function() {
var html_string = $('<div class="row">).html('
<div class="input-field col s3 m2">
{{ render_inputfield(form.day) }}
</div>
<div class="input-field col s3 m2 l1">
<input type="text" name="time1" id="time_field" class="time" data-time-format="H:i" />
<label for="time1">{{ _('von') }}</label>
</div>
<div class="input-field col s3 m2 l1">
<input type="text" name="time2" id="time_field" class="time" data-time-format="H:i" />
<label for="time2">{{ _('bis') }}</label>
</div>
<div class="input-field col s3 m2 l1">
<input type="text" name="time3" id="time_field" class="time" data-time-format="H:i" />
<label for="time3">{{ _('von') }}</label>
</div>
<div class="input-field col s3 m2 l1">
<input type="text" name="time4" id="time_field" class="time" data-time-format="H:i" />
<label for="time4">{{ _('bis') }}</label>
</div>
<div class="input-field col s4 m4 l2">
<a class="btn-floating waves-effect waves-light" id="add_button"><i class="material-icons">add</i></a>
</div>
</div>
');
$('#openinghours').append(html_string);
});
</script>
Über die ids muss man sich wohl später Gedanken machen. Die Frage ist erst mal, ob das so überhaupt Sinn macht.
@meego: Das Templatesystem schaut nicht ob sich ein Platzhalter innerhalb eines <script>-Tags befindet oder nicht, das kann also eigentlich nicht sein dass es ausserhalb funktioniert, innerhalb aber nicht.
Code: Alles auswählen
<div class="input-field col s3 m2">
{{ render_inputfield(form.day) }}
</div>
<div class="input-field col s3 m2">
{{ render_inputfield(form.day) }}
</div>