我想使用Django提供的ModelChoiceField,但是它的行为不符合我的预期。
我希望用户看到的显示值是来自我的模型的字符串值(这个已经实现了),但是当用户提交表单时,返回的应该是模型的主键而不是显示值。我尝试在Django表单上使用to_field_name="id",虽然在HTML渲染时的值是正确的,但是当用户提交表单时,我得到的值却是显示值而非我期望的主键。
customer_edit_form.py
annual_income = forms.ModelChoiceField(label='Annual income', to_field_name="id", queryset=cust_income_range.objects.all(), empty_label='-- None --')
models.py
# Annual Income Model
class cust_income_range(models.Model):
id = models.IntegerField(primary_key=True)
range = models.CharField(max_length=50)
def __str__(self):
return self.range
customer_view.py
annual_income = form.cleaned_data['annual_income']