【问题标题】:Why Django form choice field don't showing initial value from model as selected为什么 Django 表单选择字段不显示所选模型的初始值
【发布时间】:2020-10-23 10:44:45
【问题描述】:

无法将模型值表示为在表单选择字段中选择的值。 在模板中,我的对象有编辑选项,我想在表单字段中填充所有当前对象值,但选择的字段总是会显示模型默认值。知道如何修复这个思想 django 功能吗?

所以我现在拥有的:首先是我的模型:

class ClientPriceSelection(models.Model):
    A_B_choice = (
        (50.00, 50.00),
        (25.00, 25.00)
    )
    ...
    p_four = models.DecimalField(
        choices=A_B_choice, max_digits=6, decimal_places=2,
        default=50.00, verbose_name="...", help_text="(---)")

我的看法:

    addon = get_object_or_404(ClientPriceSelection, id=addon_id)
    # print(addon.p_four)
    form = ClientPriceListSelectionForm(
        request.POST or None,
        initial={
            'p_one': addon.p_one, 'p_two': addon.p_two,
            'p_three': addon.p_three, 'p_four': addon.p_four,
            'p_five': addon.p_five, 'p_seven': addon.p_seven,
            'p_eight': addon.p_eight, 'p_nine': addon.p_nine,
            'p_ten': addon.p_ten, 'p_eleven': addon.p_eleven,
            'internal_notes': addon.internal_notes,
        })
    context = {
        "form": form,
        'client': get_object_or_404(Client, id=addon.agreement.client.id),
    }

我的表格:

class ClientPriceListSelectionForm(forms.ModelForm):
    class Meta:
        model = ClientPriceSelection
        fields = [
            'p_one', 'p_two', 'p_three', 'p_four', 'p_five',
            'p_seven', 'p_eight', 'p_nine', 'p_ten', 'p_eleven',
            'internal_notes',
        ]
        widgets = {
            'internal_notes': forms.Textarea(
                attrs={'class': 'vLargeTextField', 'cols': '40', 'rows': '10', 'maxlength': '500'}),
        }

【问题讨论】:

  • 您确定视图中的addon.p_four与默认值不同吗?
  • 另外,您确定addon.p_four 包含有效选择吗?如果它无效,则表单将回退到模型默认值。
  • 另外,如果request.POST 包含某个字段的值,则使用该值而不是initial
  • @Ralf - 在此示例中,我有两个选择 25.00 和 50.00,如果我将其从 50 更改为 25,则在对象视图中我看到正确的值,并且计算正常,但如果我想要要编辑此对象,选择的值将设置为默认值,所有其他值将显示为 db,此外,如果我打印此字段值,我将获得正确的值。
  • @Ralf - P.S.这里的问题是传递给表单的初始值不是设置选项作为选择<select name="p_four" id="id_p_four"> <option value="50.0">50,0</option> <option value="25.0">25,0</option> </select>

标签: python django


【解决方案1】:

好的,我想通了,对于任何通过将初始值设置为表单来努力将选项标记为选择的人,请使用选择字段显示选项

initial={'your_field': object.get_yourField_display}

就我而言:

'p_four': addon.get_p_four_display,

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2013-01-07
    • 1970-01-01
    • 2017-08-17
    • 2012-02-20
    相关资源
    最近更新 更多