【发布时间】:2015-10-08 19:39:15
【问题描述】:
我创建了一个“地址”模型,供我的应用程序的许多不同部分使用。每个用户可以拥有多个专属于他们的地址。我创建了另一个属于用户的类 - 'PersonalDetails'。我希望这个类至少有一个,但最多有六个属于用户的地址。
我当前的设置(涉及清晰的表单)允许这样做,但地址字段是一个“选择”字段,其中包含当前属于该用户的地址列表。我希望用户能够使用现有地址或随时创建新地址。我该如何做到这一点?我尝试让“PersonalDetails”表单使用“AddressForm”,但没有任何乐趣。
作为额外的奖励,我最初只想呈现一个地址表单,但用户可以选择单击“添加更多地址”以获取更多地址字段。这听起来像是表单集的工作,但我不知道如何使用脆皮 - 任何帮助都会很棒!
Address_models.py
class Address(models.Model):
# Relations
profile = models.ForeignKey(
Profile,
verbose_name = "user"
)
# Attributes - Mandatory
address_line1 = models.CharField(
max_length = 45,
verbose_name = "Address line 1"
)
city = models.CharField(
max_length = 50,
)
postcode = models.CharField(
max_length = 8,
verbose_name = "Postcode",
help_text = "Enter your postcode",
blank = False,
validators = [RegexValidator(
"[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][A-Z]{2}")]
)
# Attributes - Optional
start_date = models.DateField(
verbose_name = "Start Date",
blank = True,
null = True,
help_text = "Move in date"
)
end_date = models.DateField(
verbose_name = "End Date",
blank = True,
null = True,
help_text = "Move out date"
)
address_line2 = models.CharField(
verbose_name = "Address line 2",
max_length = 45,
blank = True,
null = True
)
county = models.CharField(
verbose_name = "County",
max_length = 40,
blank = True,
null = True
)
PersonalDetails_models.py
class PersonalDetails(models.Model):
# Relations
profile = models.ForeignKey(
Profile,
verbose_name = "user"
)
# Attributes - Mandatory
ni_number = models.CharField(
max_length = 9,
verbose_name = "National Insurance Number",
help_text = "Enter your National Insurance number",
validators = [RegexValidator(
"^[a-zA-Z]{2}[0-9]{6}[A-Z]$")]
)
last_address = models.ForeignKey(
Address
)
# Attributes - Optional
prior_1_address = models.ForeignKey(
Address,
blank = True,
null = True,
related_name = "prior_1_address"
)
prior_2_address = models.ForeignKey(
Address,
blank = True,
null = True,
related_name = "prior_2_address"
)
prior_3_address = models.ForeignKey(
Address,
blank = True,
null = True,
related_name = "prior_3_address"
)
prior_4_address = models.ForeignKey(
Address,
blank = True,
null = True,
related_name = "prior_4_address"
)
prior_5_address = models.ForeignKey(
Address,
blank = True,
null = True,
related_name = "prior_5_address"
)
prior_6_address = models.ForeignKey(
Address,
blank = True,
null = True,
related_name = "prior_6_address"
)
Address_forms.py
class AddressForm(forms.ModelForm):
class Meta:
model = Address
fields = '__all__'
PersonalDetails_forms.py
class PersonalDetailsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PersonalDetailsForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_tag = False
class Meta:
model = PersonalDetailsForm
fields = ['ni_number', 'last_address', 'prior_1_address', 'prior_2_address', 'prior_3_address', 'prior_4_address', 'prior_5_address', 'prior_6_address']
【问题讨论】:
标签: django django-forms django-crispy-forms