我有两个由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'
)
答案 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'
)