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

5

我想使用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']

不,你得到的值是整个模型实例。你可以从中获取任何字段。 - Daniel Roseman
1个回答

4

经过大量的故障排除,我发现在视图中可以这样做,以获取ID值而非str值。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接