1

既存の値を入力する必要がある編集フォームを作成しようとしています。すべてのフィールドに事前入力していますが、foreignkey フィールドが問題を引き起こしています。

これが私のforms.pyです

def make_bowling_form(teamid, fixtureid):
    class BowlingForm(forms.Form):
        player = forms.ModelChoiceField(
            queryset=PlayerShortlist.objects.filter(
                team = teamid,
                fixture = fixtureid
            )
        )
        overs = forms.FloatField(initial=0.0)
        runs = forms.IntegerField(initial=0)
        wickets = forms.IntegerField(initial=0)
    return BowlingForm

とviews.py

@login_required
def edit_bowling(request, team_id, fixture_id):
    template = get_template('cricket/edit_bowling.html')
    if Team.objects.get(id=team_id) == Team.objects.get(owner=request.user):
        matchscorecard = InningsCard.objects.get(team = team_id, fixture = fixture_id)
        bowlers = BowlingDetail.objects.filter(innings = matchscorecard)
        bowlingforms = formset_factory(
            make_bowling_form(team_id, fixture_id),
            extra=0,
        )
        bowlingforms = bowlingforms(initial = bowlers.values())
        page_vars=Context({
            'loggedinuser': request.user,
            'bowlers': bowlers,
            'bowlingforms': bowlingforms,
        })
    else:
        error = "You dont have permission to add score for this team"
        page_vars=Context({
            'loggedinuser': request.user,
            'error': error
        })
    crsfcontext = RequestContext(request, page_vars)
    output = template.render(crsfcontext)
    return HttpResponse(output)

外部キーフィールドを除くすべての値が正しく表示されます。さらに調査して、bowlers.value() を出力しました。

[{'runs': 32, 'innings_id': 1, 'wickets': 1, 'player_id': 3, 'overs': 4.0, 'id': 1}, {'runs': 21, 'innings_id': 1, 'wickets': 3, 'player_id': 4, 'overs': 4.0, 'id': 2}, {'runs': 19, 'innings_id': 1, 'wickets': 3, 'player_id': 2, 'overs': 4.0, 'id': 3}]

そして私のテンプレートは私に..

<select name="form-0-player" id="id_form-0-player">
<option value="" selected="selected">---------</option>
<option value="37">AC</option>
<option value="38">AD</option>
<option value="39">DD</option>
<option value="40">LF</option>
<option value="41">22</option>
<option value="42">dkja</option>
</select>

この場合の選択された値は ----------- .. それは私が選択した値であるべきですが、私の Bowlers.value は私に名前を与えません.. それは私に ID を与えます。

どうすれば状況を修正できますか?

//ねずみ

4

1 に答える 1

1

ModelFormand instance(またはquerysetフォームセットの場合) を使用します。

def make_bowling_form(teamid, fixtureid):
    class BowlingForm(forms.ModelForm):
        class Meta:
            model = Bowling

        player = forms.ModelChoiceField(
            queryset=PlayerShortlist.objects.filter(
                team = teamid,
                fixture = fixtureid
            )
        )
    return BowlingForm

BowlingFormSet = modelformset_factory(
    make_bowling_form(team_id, fixture_id),
    extra=0,
)
bowlingforms = BowlingFormSet(queryset=bowlers)
于 2012-04-05T04:10:06.247 に答える