You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django数据库预填充表单问题:产品修改表单无法自动填充数据

Django表单无法预填充现有数据问题

我给网站创建了类产品的Travels(旅行项目),需要让管理员能修改这些项目的信息,因此制作了一个信息修改表单。要求表单能预填充当前的现有数据,方便管理员仅修改需要变更的内容,但尝试了多种方法均未成功。

表单代码

class ModifProduct(forms.ModelForm):
    class Meta : 
        model = Product 
        fields = ['price', 'description','date','display']
        widget = {
            'price': forms.NumberInput(),
            'description': forms.Textarea(),
            'date': forms.DateInput(),
            'display': forms.CheckboxInput(),
        }

视图代码

def update_product(request, id):
    prod = Product.objects.get(pk=id)
    if request.method == 'POST':
        fm = ModifProduct(request.POST, instance=prod)
        if fm.is_valid():
            fm.save()
            return redirect("/accueil/gestion/")
    else: 
        fm = ModifProduct(instance=prod)
        
    context = {
        'form': fm,
    }
    return render(request, 'accueil/update_product.html', context)

模板代码

<form action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" class="btn btn-success" value="Modifier">
</form>

访问页面的按钮代码

<form action="{% url 'update_product' prod.id %}" method="POST">
    {% csrf_token %}
    <input type="submit" class="btn btn-warning btn-sm" value="Modifier">
</form>

尝试过的视图写法1

def update_product(request, id):
    prod = Product.objects.get(pk=id)
    if request.method == 'POST':
        fm = ModifProduct(request.POST, instance=prod)
        if fm.is_valid():
            fm.save()
            return redirect("/accueil/gestion/")
    else: 
        fm = ModifProduct(instance=prod, initial={'price': prod.price, 'description': prod.description, 'date': prod.date, 'display': prod.display})
    context = {
        'form': fm,
    }
    return render(request, 'accueil/update_product.html', context)

尝试过的视图写法2

def update_product(request, id):
    prod = Product.objects.get(pk=id)
    if request.method == 'POST':
        fm = ModifProduct(request.POST, instance=prod)
        if fm.is_valid():
            fm.save()
            return redirect("/accueil/gestion/")
    else: 
        fm = ModifProduct(instance=prod)
        fm.fields['price'].initial = prod.price
        fm.fields['description'].initial = prod.description
        fm.fields['date'].initial = prod.date
        fm.fields['display'].initial = prod.display
        
    context = {
        'form': fm,
    }
    return render(request, 'accueil/update_product.html', context)

内容的提问来源于stack exchange,提问作者P3ps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:05:38