Django ModelForm出错.选择一个有效的选项.这种选择不是有效的选择之一



我有一个Model和一个ModelForm。ModelForm有一个用JQuery实现的依赖下拉列表。每次从性别下拉列表中选择时,类别下拉列表都会相应更改(使用JQuery完成(。每当我试图在视图中保存ModelForm时,我都会收到一个错误,说我选择的选项无效。这是否与从性别下拉列表中选择后添加到类别下拉列表的选项有关?它是否会与类别字段的默认空二元组发生冲突?错误出现在类别字段上。

在models.py中,

GENDER_CHOICES = [
('Male', 'Male'),
('Female', 'Female'),
]
class Person(models.Model):
name = models.CharField(max_length=50, unique=True)
gender = models.CharField(max_length=7, choices=GENDER_CHOICES)
category = models.CharField(max_length=20, choices=[('', ''), ])

在forms.py中,

class PersonForm(ModelForm):
class Meta:
model = Person
fields = [
'name',
'gender',
'category',
]

在views.py中,

def personform_page(request):
context = {}
if request.method == 'POST':
personform = PersonForm(request.POST)
if personform.is_valid():
personform.save()
return redirect('personform_page')
context['personform'] = personform
else:
personform = PersonForm()
context['personform'] = personform
context['male_categories'] = MALE_CATEGORIES
context['female_categories'] = FEMALE_CATEGORIES
return render(request, 'app1/personform_page.html', context=context)

在app1/personform_page.html中,

<form class="form-class" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% for field in personform %}
<p>
{{ field.label_tag }}
{{ field }}
{% if field.help_text %}
<small style="color: black;"> {{ field.help_text }} </small>
{% endif %}
{% for error in field.errors %}
<p style="color: red;"> {{ error }} </p>
{% endfor %}
</p>
{% endfor %}
<button class="btn btn-outline-primary" type="submit">Join</button>
</form>
<script>
$(document).ready( function() {
$("#id_category").hide();
$("#id_gender").on('change', function(){
var gender = $("#id_gender").val();
if(gender == 'Male'){
$('#id_category').empty();
$("#id_category").show();
var maleCategories = ['Male Category 1', 'Male Category 2', 'Male Category 3'];
var length = maleCategories.length;
var i;
for(i=0; i < length; i++){
maleCategory = maleCategories[i];
$('#id_category').append(
`
<option value="${maleCategory}">
${maleCategory}
</option>
`
);
}
}
else if(gender == 'Female'){
$('#id_category').empty();
$("#id_category").show();
var femaleCategories = ['Female Category 1', 'Female Category 2', 'Female Category 3'];
var length = femaleCategories.length;
var i;
for(i=0; i < length; i++){
femaleCategory = femaleCategories[i];
$('#id_category').append(
`
<option value="${femaleCategory}">
${femaleCategory}
</option>
`
);
}
}
else{
$('#id_category').empty();
}
});
});
</script>

删除类别字段中的"选项"部分。通过将其设为"choices=[('',''(,]",您就要求该选项为空。任何值都将失败。如果您删除,如下所示,任何值都将被接受(假设它小于20个字符(。

category = models.CharField(max_length=20)

最新更新