2016-10-13 4 views
2

Ich arbeite an der Erstellung einer Datenbank, die Programme hat und diese Programme haben Risiken. Einige Hintergrundinformationen: Programme (Großeltern) haben mehrere Merkmale (Eltern), die mehrere Kategorien (Kinder) haben. Ich habe bereits eine Datenbank erstellt, die diese enthält, jedoch möchte ich Risiken zu einem bestimmten Programm hinzufügen.Django - Dynamische Formularfelder basierend auf Fremdschlüssel

Das heißt, zum Beispiel habe ich Risiko 1, das ich zu Programm 1 hinzufügen möchte. Ich muss die folgenden Fragen beantworten: Welche Eigenschaften haben Risiko 1? Um dies zu beantworten, möchte ich ein dynamisches Formularfeld erstellen. (Beachten Sie, dass die Anzahl der Merkmale beliebig sein kann, sowie die Anzahl der Kategorien, die jedes Merkmal aufweist).

Wie konstruiere ich solche Form? Ich habe Formsets ausprobiert, aber ich weiß nicht, wie ich diese in praktischer Weise umsetzen soll (ich bin immer noch ein wenig neu bei Python).

Dies ist ein Druck-Bildschirm, wie ich es implementiert werden möchte: https://gyazo.com/40c448c0096a9ec5da751ba9883dc912
Allerdings habe ich keine Ahnung, was zu tun ist. (Beachten Sie, dass die möglichen Antworten im Dropdown-Menü die Kategorien sind, die diesem bestimmten Merkmal entsprechen). Das ist, was ich immer: https://gyazo.com/25fd18e2f31e6931bfd3639ce4be632c

Dies ist der entsprechende Code ist, ich habe bisher:

# views.py 
def risk_create(request): 
program = get_object_or_404(Program, id=20) 
RiskFormSet = formset_factory(RiskForm, ... 
    ... extra=len(Program.objects.get(id=program.id).char_set.all())) 
context = { 
    'title': 'New Risk', 
    'form': RiskFormSet 
} 
return render(request, 'risk_form.html', context) 


# forms.py 
class RiskForm(forms.Form): 
for char in Program.objects.get(id=20).char_set.all(): 
    char = forms.ModelChoiceField(char.cat_set.all(), label=char) 

ich meine Antwort gefunden habe.

+0

Bearbeiten: Nehmen wir an, ich habe eine Anfrage Menge von Zeichen (Char.Objects.Filter (program__id = char.Program_ID). Ich möchte ein Formular basierend auf dieser Abfrage setzen. Das heißt, diese Abfrage hat 4 Merkmale: Mein Formular muss 4 Felder enthalten, die nach der Kategorie jedes Merkmals fragen –

Antwort

0

Um Ihre Frage neu zu formulieren, fragen Sie, wie Sie die Formularfelder vorbelegen? Wenn dies in Betracht gezogen wird mit initial values in your formsets

+0

Nein, das Missverständnis, dass im zweiten Druckbildschirm die Anfangswerte als ---- gesetzt sind Auf dem ersten Druckbildschirm habe ich sie schon manuell auf einen Wert gesetzt, die Frage ist vielmehr, wie man char (in der letzten Codezeile) char (also die Variable erhält das Char-Label) dynamisch definiert ist nicht passierbar, möchte ich jedoch einen Workaround kennen –

Verwandte Themen