/ / Django форма для кожного елемента списку - python, django, forms

Форма Django для кожного елемента списку - python, django, forms

Я намагаюся зробити webapp, використовуючи djangoдозволяє користувачеві вибрати того, для кого, на їхню думку, переможець буде в декількох іграх. У мене є ігри, як модель, яка має домашню команду, віддалену команду, id, серед іншого. Тепер, щоб подати повідомлення, я хотів би, щоб користувачі вставляли декілька рядків у таблицю з ідентифікатором користувача та вибраною командою.

Я спробував використовувати formets, але не можу зрозуміти, як вони працюють з різними мітками.

Форма, яку я наразі маю, це.

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

Дякую!

Відповіді:

1 для відповіді № 1

Невідомо, що ви маєте на увазі щодо "різних міток", але схоже, що ви бажаєте набрати форму набору моделей: https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#model-formsets

Отже, у вас буде щось подібне

from django.forms import modelformset_factory
from models import PickForm

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