python Django:按数据库预填充表单

vaqhlq81  于 2023-02-11  发布在  Python
关注(0)|答案(1)|浏览(129)

我创建了旅行(很像产品)为我的网站,我想让一个管理员来改变一些有关这些信息。所以我创建了一个表格来改变信息。但我希望该表格是预先填写的实际信息,使管理员只需改变他想改变的。
我一直在尝试不同的方法,但从来没有成功。
这是我的表格:

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>

我试过这种观点:

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)

我试过这种观点:

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)
l7wslrjt

l7wslrjt1#

你可以为你的网站使用模板,这比基于函数的视图要容易得多:

class update_product(views.UpdateView):
    template_name = 'your html file for update'
    form_class = ModifProduct

    def form_valid(self, form):
        return super().form_valid(form)

相关问题