2012-04-05 4 views
1

기존 값을 사용하여 편집해야하는 편집 양식을 만들려고합니다. 모든 필드를 미리 채우지 만 외래 필드로 인해 문제가 발생합니다.db에서 데이터로 formset_factory 미리 채우기

은 여기 내 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 

하고 올바르게 외래 키 필드를 제외하고 나에게 모든 값을주고있다

@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) 

views.py의. t는 상기 난에 가서 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. 가치는 나에게 이름을주지 않는다.. 그것은 나에게 ID를 준다.

어떻게 해결할 수 있습니까?

// 마우스

답변

1

사용 (formsets 또는 queryset) ModelForminstance :

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) 
+0

문제가 해결되지는 ... 중 내가 모델의 formset을 가질 수 있습니다. .. PlayerShortlist에있는 모든 객체를 포함하고 있습니다 .. PlayerShortlist가 먼저 쿼리 세트에 적용되면 필드에 popu이 발생하지 않습니다. lated. – debuggerpk

+0

그런 다음 폼의'\ _ \ _ init \ _ \ _ '에'self.fields ['player ']. queryset'를 제한하십시오. 또한, 'PlayerShortlist'에 대한 ForeignKey 인'BowlingDetail' 필드에'player' 필드가 있습니까? – ilvar