我试图根据用户在另一个字段中输入的内容自动填充一个字段。您将在下面看到一个名为“typeofacct”的 Choice 字段,还有另一个名为“mintoopen”的字段。 “typeofacct”的选项之一是日常业务,还有其他 4 个选项。例如,如果用户选择日常业务作为“typeofacct”字段的选项,我希望“mintoopen”字段填写“$100”(字符串)。以下是我的文件:
forms.py
class WaiveForm(forms.Form):
header = forms.CharField(
widget=HeaderWidget(attrs={'class': 'my-css-class'}),
initial='Fee Waive Worksheet',
required=False,
label=''
)
businessname = forms.CharField(max_length=50, label='Business Name')
acctnum = forms.IntegerField(label='Business Account Number')
annualreviewdt = forms.DateField(label='Annual Review Date', initial=(today + relativedelta(years=1)).strftime('%m/%d/%Y'), disabled=True, required=False)
effectivemonth = forms.ChoiceField(choices=effectiveMonthChoice, label='Effective Month')
typeofacct = forms.ChoiceField(choices=typeOfAcctChoice, label='Type of Account')
# Table
mintoopen = forms.ChoiceField(required=False, choices=minToOpenOptions)
class SnippetForm(forms.ModelForm):
class Meta:
model = Snippet
fields = ('businessname', 'acctnum', 'annualreviewdt', 'effectivemonth', 'typeofacct', 'mintoopen')
模型.py
class Snippet(models.Model):
businessname = models.CharField(max_length=50)
#acctNum = models.IntegerField(max_length=17)
acctnum = models.PositiveIntegerField(primary_key=True, validators=[MaxValueValidator(99999999999999999)])
annualreviewdt = models.DateTimeField(default=today)
effectivemonth = models.CharField(choices=effectiveMonthChoice, max_length=2)
typeofacct = models.CharField(choices=typeOfAcctChoice, max_length=1)
# Table
mintoopen = models.CharField(max_length=20, blank=True, choices=minToOpenOptions, default=typeofacct.formfield())
def __str__(self):
return self.businessname, self.acctnum, self.annualreviewdt, self.effectivemonth, self.typeofacct, self.mintoopen
def mintoopen_func(self):
return minToOpenArray[int(self.typeofacct)]
def save(self, *args, **kwargs):
if not self.mintoopen:
self.mintoopen = self.mintoopen_func()
super(Snippet, self).save(*args, **kwargs)
views.py
def waive(request):
if request.method == 'POST':
form = WaiveForm(request.POST)
if form.is_valid():
businessname = form.cleaned_data['businessname']
acctnum = form.cleaned_data['acctnum']
annualreviewdt = form.cleaned_data['annualreviewdt']
effectivemonth = form.cleaned_data['effectivemonth']
typeofacct = form.cleaned_data['typeofacct']
#mintoopen = form.cleaned_data['mintoopen']
mintoopen = minToOpenArray[int(form.cleaned_data['typeofacct'])]
print('Business Name: ', businessname,
'\nBusiness Account Number: ', acctnum,
'\nAnnual Review Date: ', annualreviewdt.strftime('%m/%d/%Y'),
'\nEffective Month: ', effectivemonth,
'\nType of Account: ', typeofacct,
'\nMin to Open: ', mintoopen)
form = WaiveForm()
return render(request, 'forms.html', {'form': form})
def snippet_detail(request):
if request.method == 'POST':
form = SnippetForm(request.POST)
if form.is_valid():
form2 = form.save(commit=False)
form.save()
form = SnippetForm()
return render(request, 'forms.html', {'form': form})
正如您在 models.py 中看到的,我尝试重写 save() 方法,但我不确定如何实现它。我也尝试使用 save(commit=False)。再次,我希望将表单设置如下,除非选择日常业务(或其他选项)时,“mintoopen”字段会自动填写相应的值。
要根据
mintoopen
字段中的选择自动填充 typofacct
字段,您可以在模板中使用 JavaScript/jQurey,这样您的模板应如下所示:
<!-- include jQuery library -->
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<form method="post" action="{% url 'waive' %}" id="waiveForm">
{% csrf_token %}
{{ form.as_p }}
<script>
// define a mapping of typeofacct values to corresponding mintoopen values
var minToOpenMapping = {
'1': '$100',
'2': '$200',
// add more mappings as needed
};
// function to update mintoopen based on typeofacct selection
function updateMintoOpen() {
var typeofacctValue = $('#id_typeofacct').val();
var mintoopenValue = minToOpenMapping[typeofacctValue];
// Set the value of the mintoopen field
$('#id_mintoopen').val(mintoopenValue);
}
// attach the updateMintoOpen function to the change event of typeofacct field
$('#id_typeofacct').change(updateMintoOpen);
// trigger the initial update to set mintoopen based on the initial value of typeofacct
updateMintoOpen();
</script>
<input type="submit" value="Submit">
</form>
希望对你有帮助