В настоящее время я работаю над приложением, и у меня возникла проблема с моей ModelForm.
Мне кажется, что параметры, введенные в ModelChoiceField, не принимаются во внимание.
Это это мои формы.py:
class PlayerModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return '{} from {} at {} '.format(obj.name, obj.team, obj.price)
class Form(forms.ModelForm):
def __init__(self, contest_id, *args, **kwargs):
super(Form, self).__init__(*args, **kwargs)
contest = ContestLOL.objects.filter(id=contest_id)[0]
teams = contest.teams.all()
players = Player.objects.filter(team__in=teams).order_by('-price')
self.fields['top'].queryset = players.filter(role='Top')
self.fields['jungle'].queryset = players.filter(role='Jungle')
self.fields['mid'].queryset = players.filter(role='Mid')
self.fields['adc'].queryset = players.filter(role='ADC')
self.fields['support'].queryset = players.filter(role='Support')
self.fields['top'].initial = players.filter(role='Top')[0]
self.fields['jungle'].initial = players.filter(role='Jungle')[0]
self.fields['mid'].initial = players.filter(role='Mid')[0]
self.fields['adc'].initial = players.filter(role='ADC')[0]
self.fields['support'].initial = players.filter(role='Support')[0]
class Meta:
model = Model
fields = {'top': PlayerModelChoiceField(
queryset=Player.objects.filter(role='Top'),
widget=forms.RadioSelect(),
empty_label=None,
to_field_name="top"),
'jungle': PlayerModelChoiceField(
queryset=Player.objects.filter(role='Jungle'),
widget=forms.RadioSelect(),
empty_label=None,
to_field_name="jungle"),
'mid': PlayerModelChoiceField(
queryset=Player.objects.filter(role='Mid'),
widget=forms.RadioSelect(),
empty_label=None,
to_field_name="mid"),
'adc': PlayerModelChoiceField(
queryset=Player.objects.filter(role='ADC'),
widget=forms.RadioSelect(),
empty_label=None,
to_field_name="adc"),
'support': PlayerModelChoiceField(
queryset=Player.objects.filter(role='Support'),
widget=forms.RadioSelect(),
empty_label=None,
to_field_name="supp")
}
fields = {'top', 'jungle', 'mid', 'adc', 'support'}
Это мои view.py:
def contest(request, slug=None):
contest = get_object_or_404(ContestLOL, slug=slug)
matches= Match.objects.filter(contest=contest.id)
form = Form(contest.id, request.POST or None)
if form.is_valid():
bet = form.save(commit=False)
bet.user = request.user
bet.contest = contest
bet.save()
messages.success(request, 'Bet was saved')
form = Form(contest.id)
output = { "contest": contest,
"form": form,
"matches": matches
}
return render(request, "questions/contest.html", output)
И это соревнование. html:
<form method="post">
{% csrf_token %}
Top :
<br>
{{form.top}}
<hr>
Jungle :
<br>
{{form.jungle}}
<hr>
Mid :
<br>
{{form.mid}}
<hr>
ADC :
<br>
{{form.adc}}
<hr>
Support :
<br>
{{form.support}}
<hr>
<input class="btn btn-success" type="submit" value='Submit'>
</form>
И скриншот того, что я получаю:
[enter image description here][1]
https://i.stack.imgur.com/0dOaC.png
Как вы можете видеть, RadioSelectWidget отсутствует, а метка все еще пуста. Это заставляет меня думать, что опции ModelChoiceField не работают. У кого-нибудь был такой же случай раньше.