2012-11-18 5 views
0

저는 ForiegnKey로 연결된 두 개의 모델을 가지고 있고 django-crispy-forms를 사용하여 PhoneNumber 모델의 필드를 내 양식에 사용하고 싶습니다.django-crispy-forms의 필드로 연결된 테이블의 필드를 사용하는 방법은 무엇입니까?

'phone_number__number'구문을 사용하여 시도했지만 양식의 빈 드롭 다운 목록 만 제공합니다. 단지 PHONE_NUMBER 필드로,

class Customer(models.Model): 
    phone_number = models.ForeignKey(PhoneNumber) 

class PhoneNumber(models.Model): 
    TYPES = (
     ('Cell', 'Cell'), 
     ('Home', 'Home'), 
     ('Fax', 'Fax'), 
     ('Work', 'Work'), 
) 
    primary = models.BooleanField(default=False) 
    phone_type = models.CharField(max_length=30, choices=TYPES, default='Cell') 
    number = models.CharField(max_length=15) 

그리고 내 양식 : 여기

이 게시물에 대한 고객 모델 꺼내 PHONE_NUMBER하지만 모든 것을, 내 모델입니다

class CustomerCreateForm(forms.ModelForm): 
''' 
Base form for creating customers 
''' 
def __init__(self, *args, **kwargs): 
    self.helper = FormHelper() 
    self.helper.layout = Layout(
     Fieldset(
      'Personal Information', 
      'phone_number__number', 
     ), 
     FormActions(
      Submit('submit' , 'Submit' , css_class='btn btn-success'), 
      Button('cancel' , 'Cancel' , css_class='btn btn-warning', onclick='javascript:history.go(-1);'), 
     ) 
    ) 
    super(CustomerCreateForm, self).__init__(*args, **kwargs) 

class Meta: 
    model = Customer 
    exclude = (
     'create_user', 
     'modify_user' 
    ) 

답변

1
from yourapp.models import PhoneNumber  

class CustomerCreateForm(forms.ModelForm): 
    ''' 
    Base form for creating customers 
    ''' 
    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.layout = Layout(
      Fieldset(
       'Personal Information', 
       'phone_number', 
      ), 
     FormActions(
      Submit('submit' , 'Submit' , css_class='btn btn-success'), 
      Button('cancel' , 'Cancel' , css_class='btn btn-warning', 
        onclick='javascript:history.go(-1);'), 
      ) 
     ) 
     super(CustomerCreateForm, self).__init__(*args, **kwargs) 
     self.fields["phone_number"].choices = \ 
     [(item.number, item.number) for item in PhoneNumber.objects.all()] 

     class Meta: 
      model = Customer 
      exclude = (
       'create_user', 
       'modify_user' 
      ) 
+0

숫자 필드는 CharField 여야하며 ModelChoiceField가 아니어야합니다. 나는 전화 번호를위한 일련의 선택을 표시하려고하지 않고 주어진 전화 번호를위한 텍스트 상자를 표시하려고한다. –