如何在Django中编辑表单

时间:2018-02-21 17:50:56

标签: python django django-forms django-views

我正在尝试在项目中创建一个编辑表单,但我的代码运行不正常。我找不到错误。也许有人帮助我? 我的 views.py 是:

@login_required
def szczegoly_pracownik(request, id):
    link_pracownik = get_object_or_404(Cudzoziemiec, id=id)
    return render(request, 'cudzoziemiec/szczegoly_pracownik.html', {'link_pracownik': link_pracownik})

@login_required
def edycja_pracownika(request, id):
    link_pracownik = get_object_or_404(Cudzoziemiec, id=id)
    if request.method == 'POST':
        edycja_pracownika = CudzoziemiecForm(request.user, request.POST)
        if edycja_pracownika.is_valid():
            link_pracownik = edycja_pracownika.save(commit=False) 
            link_pracownik.save()
            return render('szczegoly_pracownik', id=link_pracownik.id)
    else:
        edycja_pracownika = Cudzoziemiec(request.user)
    return render(request, 'cudzoziemiec/edycja_pracownika.html', {'edycja_pracownika': edycja_pracownika})
def szczegoly_pracownik 有责任从记录中获取详细信息 当我点击“编辑”按钮上的html文件时,网址工作正常,因为将我重定向到edycja_pracownika.html,但是在edycja_pracownika.html中,我只看到按钮,没有表单。

编辑:

表单正确显示但是为空 - 不要从创建的记录中加载数据。当我点击“编辑”按钮时,Django会给我一个错误

ValueError at /konto/pracownik/edycja/
invalid literal for int() with base 10: 'edycja'

edycja_pracownika.html

{% if request.user.is_authenticated %}
<form action="." method="post">
    {{ edycja_pracownika.as_p }}
    {% csrf_token %}
    <div class="float-right">
    <p><input type="submit" value="Edytuj" ></p>

第二次编辑:

事情发生了变化。我使用了这样的观点:

@login_required
def edycja_pracownika(request, id):
    link_pracownik = get_object_or_404(Cudzoziemiec, id=id)
    if request.method == 'POST':
        edycja_pracownika = CudzoziemiecForm(request.POST, instance=link_pracownik)
        if edycja_pracownika.is_valid():
            link_pracownik = edycja_pracownika.save(commit=False)
            link_pracownik.save()
            return render('szczegoly_pracownik', id=link_pracownik.id)
    else:
        edycja_pracownika = CudzoziemiecForm(request.user, instance=link_pracownik)
    return render(request, 'cudzoziemiec/edycja_pracownika.html', {'edycja_pracownika': edycja_pracownika})

当我点击编辑按钮时,表单会正确加载填充字段。但是,当我单击下一个按钮编辑以确认更改时,Django会给我一个错误:

invalid literal for int() with base 10: 'edycja'

解释者在网上向我展示:

@login_required
def szczegoly_pracownik(request, id):
    link_pracownik = get_object_or_404(Cudzoziemiec, id=id) ...
    return render(request, 'cudzoziemiec/szczegoly_pracownik.html', {'link_pracownik': link_pracownik})

1 个答案:

答案 0 :(得分:0)

除非您覆盖CudzoziemiecForm的构造函数,否则它接受您要传递给表单的数据作为唯一的位置参数。这意味着使用您应拥有的用户数据初始化表单:

edycja_pracownika = CudzoziemiecForm(request.POST)

要为GET请求创建新表单,您应该:

edycja_pracownika = CudzoziemiecForm()

Django的文档提供了一些sample view code供您查看。