/ / Django-Formular für jedes Element in einer Liste - Python, Django, Formulare

Django Form für jedes Element in einer Liste - Python, django, Formulare

Ich versuche eine Webapp mit Django zu erstellenDer Benutzer kann wählen, von wem er den Gewinner in einigen Spielen erwartet. Ich habe die Spiele als Modell, das unter anderem die Heimmannschaft, die Auswärtsmannschaft, die ID hat. Beim Senden möchte ich, dass die Benutzer mehrere Zeilen in eine Tabelle mit der Benutzer-ID und dem Team einfügen, das sie ausgewählt haben.

Ich habe versucht Formulare zu verwenden, aber ich kann nicht herausfinden, wie sie mit verschiedenen Labels arbeiten.

Die Form, die ich derzeit habe, ist diese.

class PickForm(forms.ModelForm):
"""
A form that allows a user to make a pick on the
selected game
"""
error_messages = {
"no_match": ("Your selections do not match the corresponding options")
}

team_picked = forms.CharField(label=("Your choice"))

class Meta:
model = Pick
fields = ("team_picked",)

def __init__(self, *args, **kwargs):
self.user_id = kwargs.pop("user_id", None)
self.matchweek = kwargs.pop("matchweek", None)
super(PickForm, self).__init__(*args, **kwargs)

def clean_team_picked(self):
team_picked = self.cleaned_data["team_picked"]
if(team_picked == self.home_team):
return team_picked
elif(team_picked == self.away_team):
return team_picked
else:
raise forms.ValidationError(
self.error_messages["no_match"],
code="no_match",
)

def save(self, commit=True):
pick = super(PickForm, self).save(commit=False)
pick.team_picked = self.cleaned_data["team_picked"]
pick.user_id = self.user_id
pick.matchweek = self.matchweek
if commit:
pick.save()
return pick

Vielen Dank!

Antworten:

1 für die Antwort № 1

Nicht sicher, was Sie mit den "anderen Labels" meinen, aber es scheint, als wollten Sie ein Model-Formset https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#model-formsets

Du hättest so etwas

from django.forms import modelformset_factory
from models import PickForm

PickFormSet = modelformset_factory(Pick, form=PickForm, queryset=Pick.objects.filter())