2011-11-12 3 views
2

Django에서 모델을 외래 키가있는 아직 생성되지 않은 다른 모델과 연관시키는 방법이 있는지 궁금합니다. 두 모델 모두 동일한 HTML 페이지에서 동일한 ModelForm을 사용하여 작성됩니다.Django 외래 키 아직 생성되지 않은 모델

이 두 모델은 하나의 HTML 페이지에서 같은 <form>...</form>에 넣어 될 수있는 경우

class Team(models.Model): 
    name = forms.CharField 
    ... 

class Player(models.Model): 
    name = forms.CharField() 
    key = forms.ForeignKey(Team) 
    ... 

기본적으로, 나는 궁금하네요.

답변

1

외래 키는 참조 된 모델의 기본 키에 대한 참조이므로 대상이 있어야합니다. 첫 번째 양식을 저장 한 다음 저장하기 전에 두 번째 양식의 참조를 업데이트해야합니다. DB를에 저장하지 않고 폼에서 모델 인스턴스를 얻기 위해, 당신은 당신이 다 대다 필드를 사용하는 경우 다음 자신에게 예를

instance.save() 

을 저장해야하고

instance = form.save(commit=False) 

을 사용할 수 있습니다 당신은 당신이 inlineformset 설명서를 확인 할 수 있습니다 save_m2m

+0

가 어떻게 새로운 LY 저장 모델 두 번째의 참조를 업데이트하나요 : 여기

def manage_teams(request, team_id): team = Player.objects.get(pk=team_id) PlayerInlineFormSet = inlineformset_factory(Player, Team) if request.method == "POST": formset = PlayerInlineFormSet(request.POST, request.FILES, instance=team) if formset.is_valid(): formset.save() # Do something. else: formset = PlayerInlineFormSet(instance=team) return render_to_response("manage_teams.html", { "formset": formset, }) 

는 또 다른 예를 간다? POST dict에서 뭔가를 변경해야합니까? – bow

+0

인스턴스를 저장하기 전에 편집 할 수 있습니다. 예 : 'instance.team = instance2' – second

1

볼 필요, 그것은 formsets를 참조 또한, 같은보기에서 모델의 관련 개체를 편집 할 수 있습니다.

from django.forms.models import inlineformset_factory 
def new_team(request): 
    PlayerInlineFormSet = inlineformset_factory(Team, Player) 
    team= Team() 
    if request.method == 'POST': 
     form_team = TeamForm(request.POST, request.FILES, instance= team, prefix= 'team') 
     form_player = PlayerInlineFormSet(request.POST, request.FILES, instance= team, prefix= 'players') 
     if form_team.is_valid() and form_player.is_valid(): 
      form_team.save() 
      form_player.save() 
      return HttpResponseRedirect('/teams/%s/' % team.slug) 
    else: 
     form_team = TeamForm(instance= team, prefix= 'team') 
     form_player = PlayerInlineFormSet(instance= team, prefix= 'players') 
    return render_to_response('Teams/new_team.html', {'form_team': form_team, 'form_player':form_player}, context_instance=RequestContext(request)) 
+0

와우, 답변 해 주셔서 감사합니다 :). 나는 두 번째 방법을 사용하여 작동하게 만들었지 만, 나는 형식 세트를 확실히 찾는다. – bow