Python Django ForeignKey返回的是ID号而不是实际的字符串值,特别是对于基于表单的request.POST

Python Django ForeignKey返回的是ID号而不是实际的字符串值,特别是对于基于表单的request.POST,python,django,forms,foreign-keys,Python,Django,Forms,Foreign Keys,我有一个网站联系人表单,它会生成一个下拉框,其中包含在另一个模型“数据”中定义的“姓名”。联系人表单以“报价”模式运行。因此,我使用ForeignKey引用来填充“Quote”驱动表单中的“数据”信息 但是,下一步是将这些数据移动到更多的python代码中(例如,用于计算和放置在电子邮件中)。但是,当我在quote views文件中request.POST“name”时,我会收到一个ID(即1),而不是“name”的实际字符串值。我已经了解到这就是ForeignKey固有地传输数据的方式 就像我

我有一个网站联系人表单,它会生成一个下拉框,其中包含在另一个模型“数据”中定义的“姓名”。联系人表单以“报价”模式运行。因此,我使用ForeignKey引用来填充“Quote”驱动表单中的“数据”信息

但是,下一步是将这些数据移动到更多的python代码中(例如,用于计算和放置在电子邮件中)。但是,当我在quote views文件中request.POST“name”时,我会收到一个ID(即1),而不是“name”的实际字符串值。我已经了解到这就是ForeignKey固有地传输数据的方式

就像我如何在quote下拉框中返回“name”的实际字符串版本一样,我如何在数据请求中获得“name”的实际字符串版本。POST/data\u dictionary赋值?我见过类似的问题,但我不完全确定最简单的答案

models.py(原装)

models.py(与表单绑定的一个)

视图.py

def quote_req(request):
    submitted = False
    if request.method == 'POST':
        form = QuoteForm(request.POST, request.FILES)
        name = request.POST['name']
        if form.is_valid():
            data_dict = {
                'name_': str(name),
            inputdictionary = data_dict
class QuoteForm(ModelForm):
    helper = FormHelper()
    helper.form_show_labels = False
    required_css_class = 'required'
    class Meta:
        model = Quote
        fields = ['name',]
def quote_req(request):
    submitted = False
    if request.method == 'POST':
        form = QuoteForm(request.POST, request.FILES)
        name = request.POST['name']
        if form.is_valid():
            name = form.cleaned_data['name']
            data_dict = {
                'name_': str(name),
            inputdictionary = data_dict
forms.py

def quote_req(request):
    submitted = False
    if request.method == 'POST':
        form = QuoteForm(request.POST, request.FILES)
        name = request.POST['name']
        if form.is_valid():
            data_dict = {
                'name_': str(name),
            inputdictionary = data_dict
class QuoteForm(ModelForm):
    helper = FormHelper()
    helper.form_show_labels = False
    required_css_class = 'required'
    class Meta:
        model = Quote
        fields = ['name',]
def quote_req(request):
    submitted = False
    if request.method == 'POST':
        form = QuoteForm(request.POST, request.FILES)
        name = request.POST['name']
        if form.is_valid():
            name = form.cleaned_data['name']
            data_dict = {
                'name_': str(name),
            inputdictionary = data_dict
变量赋值

 ▼ Local vars
Variable    Value
name        '1'
各自的错误(我需要“name”的实际字符串值)


该解决方案与@dirkgroten在评论中提到的方案是一致的。我必须在if form.is_valid语句之后添加form.cleaned_data方法。不需要修改其他文件

视图.py

def quote_req(request):
    submitted = False
    if request.method == 'POST':
        form = QuoteForm(request.POST, request.FILES)
        name = request.POST['name']
        if form.is_valid():
            data_dict = {
                'name_': str(name),
            inputdictionary = data_dict
class QuoteForm(ModelForm):
    helper = FormHelper()
    helper.form_show_labels = False
    required_css_class = 'required'
    class Meta:
        model = Quote
        fields = ['name',]
def quote_req(request):
    submitted = False
    if request.method == 'POST':
        form = QuoteForm(request.POST, request.FILES)
        name = request.POST['name']
        if form.is_valid():
            name = form.cleaned_data['name']
            data_dict = {
                'name_': str(name),
            inputdictionary = data_dict

你为什么要这么做?您的表单是一个
ModelForm
来创建/修改
Quote
实例,因此在实例化和验证它之后,
form.cleaned_data['name']
将是所选的实际
data
实例和
form.cleaned_data['name'].name
将是该实例的
name
字段。@dirkgroten我希望保留变量“name”的实际字符串值,而不是ID,当我稍后在Python代码中引用它时,该代码使用模型数据作为主数据库的模板。但我刚刚告诉您如何从提交的表单中获取
name
string。@dirkgroten表示歉意,但我误解了我应用表单的位置。在我的代码中正确地清除了数据['name']。在您看来,在if form