如何使Django模型表单中的字段名称与模型字段名称不同?

4 投票
2 回答
2909 浏览
提问于 2025-04-16 19:03

我有一个模型和一个表单,像这样:

class Content(models.Model):
    title = models.CharField(_("title"), max_length=16)
    category = models.ForeignKey(Category, verbose_name = _('category'))

class ContentForm(forms.ModelForm):
    class Meta:
        model=Content
        fields = ('title', 'category', )

我希望表单中的字段名称是 f_category(当然,模型中的字段名称还是 category)。有没有办法做到这一点,而不需要手动构建整个表单(这很麻烦,因为这个字段是外键,必须是一个带选项列表的下拉框)?


为了更清楚一点:这里的名称是指HTML表单代码中的名称:<input type="select" name="f_category" />

2 个回答

1

我不太明白你说的“表单中的字段名称”是什么意思。你是指标签吗?还是指ID?或者是其他什么东西?设置标签其实很简单:

class ContentForm(forms.ModelForm):
    category = forms.ModelChoice(queryset=Category.objects.all(), label='f_category')
    class Meta:
        model=Content
        fields = ('title', 'category', )
6

你的评论其实暴露了你真正需要做的事情——这就是为什么你应该总是描述你遇到的实际问题,而不是你想出的解决方案。其实,在Django中处理同一页面上两个相同的表单是有正确的方法的——在创建表单字段的时候,使用prefix参数。

form1 = MyForm(prefix='form1')
form2 = MyForm(prefix='form2')

这样,当你输出form1和form2时,所有的字段都会自动加上相关的前缀,这样它们就能被正确区分开来。

撰写回答