Django模型选择字段如何return对象的主键而不是显示值

Django Model Choice Field How to return the primary key of the object instead of the display value

我正在尝试使用 Django 提供的 modelchoicefield;但是,它的行为并不像我预期的那样。

我希望向最终用户显示的是我的模型中的字符串值(有效),但是 return 是用户提交表单时模型的主键(不是显示值).我试图在 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']

经过大量故障排除后,我发现您可以在视图中执行类似的操作来获取 ID 值而不是字符串值。

annual_income = form.cleaned_data['annual_income'].pk