如何使用链接表中的字段作为django-crispy-forms中的字段?

时间:2012-11-18 19:34:54

标签: django forms django-crispy-forms

我有两个由ForiegnKey链接的模型,我想使用django-crispy-forms将PhoneNumber模型中的字段用于我的表单。

我尝试过使用语法'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 个答案:

答案 0 :(得分: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'
             )