2012-07-16 2 views
0

필자는 설명서를보고 인라인 형식이 그 대답일지도 모른다고 생각했습니다. 그러나 나는 완전히 확신하지 못합니다.Django에서 양식 내의 양식?

일반적으로 ModelForm을 만들 때마다 관련 모델에만 바인딩됩니다. 그러나 양식 내에서 두 개의 모델을 편집하려면 어떻게해야합니까?

간단히 말해서 conversation 클래스를 편집 할 때 드롭 다운에서 Deal 클래스를 선택하면 선택한 거래 클래스의 상태를 변경할 수 있기를 원하지만 deal_name은 변경하지 못합니다. 모두 같은 양식에 있습니다. 장고가 그것을 허용합니까?

class Deal(models.Model):  
    deal_name   = models.CharField() 
    status    = models.ForeignKey(DealStatus) 

class Conversation(models.Model): 
    subject    = models.CharField() 
    deal    = models.ForeignKey(Deal, blank=True, null=True) 

업데이트 :

인라인 formssets는 대답은 다음과 같은 동작입니다 있는지 확실하지 않았다 그 이유는

보기 :

call = get_object_or_404(contact.conversation_set.all(), pk=call_id) 
ConversationFormSet = inlineformset_factory(Deal, Conversation) 
fset = ConversationFormSet(instance=call)  
variables = RequestContext(request, {'formset':fset}) 
return render_to_response('conversation.html', variables) 

템플릿

{{ formset }} 

내가 얻는 결과는 내가 예상 한 결과가 아닙니다. 나는 3 가지 형태의 회화 수업을 듣고 있는데, 첫 번째 수업은 완성되어집니다. 그러나 Deal 드롭 다운 메뉴가 전혀 표시되지 않습니다. 왜?

+0

이것은 인라인가 –

+0

@ArgsKwargs 감사에 대해 정확히 것입니다. 당신이 좀 봐 주실 수 있다면, 질문을 업데이트했습니다. – Houman

+0

인라인 작업 방식으로 인해 인라인은 항상 편집중인 거래 개체의 일부가 될 것으로 예상됩니다. 다른 방법으로 작업하고 싶다면 다른 접근 방식이 필요하며 거래 필드를 해킹하여 사용자 지정을 만들 수 있습니다 거래 필드 입력이 주 객체와 일치하지 않으면 대화 객체를 다른 거래로 이동하는 동작을 절약합니다. –

답변

0

나는 해결책을 발견했으며, 이것이 앞으로 다른 문제를 가진 다른 누군가에게 도움이되기를 바랍니다. 나는 나의 모델을 재 설계하는 것을 끝내었다.

간단히 내 대화 모델에도 상태를 추가했습니다. 잘 작동

if form.is_valid():    
      call = form.save(commit=False) 
      deal = get_object_or_404(Deal.objects.all(), pk=call.deal.id) 
      deal.status = call.status 
      deal.save() 
      call.save() 

을 다음보기에서

class Conversation(models.Model): 
    subject    = models.CharField() 
    deal    = models.ForeignKey(Deal, blank=True, null=True) 
    status    = models.ForeignKey(DealStatus) 

나는 정의는 다음과 같이 저장했다.

2

또 다른 방법은 같은 신호를 사용하는 것입니다

def update_deal_status(sender, instance, created, **kwargs): 
    if created: 
     deal = Deal.objects.get(id__exact=instance.deal_id) 
     deal.status = instance.status 
     deal.save() 

signals.post_save.connect(update_deal_status, sender=Conversation) 
관련 문제