首页 > 解决方案 > 提交 django 表单时,POST 请求是否包含模型 ID?

问题描述

我有以下 django 形式:

class AssayCompoundForm(forms.ModelForm):
titrated_compound = forms.ModelChoiceField(queryset=Compound.objects.all())
fixed_compound = forms.ModelChoiceField(queryset=Compound.objects.all())
fixed_concentration = forms.FloatField()

class Meta:
    model = AssayCompound
    fields = ['titrated_compound', 'fixed_compound', 'fixed_concentration']

和以下 HTML:

<form method="POST" enctype="multipart/form-data" id="assay-compound-form">
{% csrf_token %}
<div class="row">
    <div class="col-sm">
        <label class="form-input">Titrated Compound</label>
    </div>
    <div class="col-sm">
        {{ new_assay_compound_form.titrated_compound }}
    </div>
    <div class="col-sm"></div>
</div>
<div class="row">
    <div class="col-sm">
        <label class="form-input">Fixed Compound</label>
    </div>
    <div class="col-sm">
        {{ new_assay_compound_form.fixed_compound }}
    </div>
    <div class="col-sm"></div>
</div>
<div class="row">
    <div class="col-sm">
        <label class="form-input">Fixed Concentration</label>
    </div>
    <div class="col-sm">
        {{ new_assay_compound_form.fixed_concentration }}
    </div>
    <div class="col-sm"></div>
</div>
<input id="assay-compound-form-submit" type="submit" name="add-assay-compound" style="display:none">

此表单生成的 request.POST 如下所示:

<QueryDict: {'csrfmiddlewaretoken': ['blah'], 'titrated_compound': ['3'], 'fixed_compound': ['5'], 'fixed_concentration': ['4'], 'add-assay-compound': ['Submit']}>

我的问题是:用户选择的“titrated_compound”和“fixed_compound”的字符串列表是Django分配的模型ID吗?还是它们是“Compound.objects.all()”生成的有序列表的索引的索引?

标签: django

解决方案


除非您指定to_field_name属性,否则这些是每个模型的主键(默认情况下是idDjango 自动生成的字段)。检查这个参考,你也可以看看这里的代码。和方法特别令人感兴趣prepare_valueto_python


推荐阅读