首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django表单,没有提交表单

Django表单,没有提交表单
EN

Stack Overflow用户
提问于 2022-07-01 22:25:26
回答 2查看 30关注 0票数 3

我对django很陌生,我的状态有点问题。它没有提交任何东西。我不知道为什么,航站楼里没有问题。它正确地显示表单,但在填写和提交表单时,它只是将我重定向到相同的表单,但为空白。我检查了数据库,没有添加任何内容。我的代码如下:

代码语言:javascript
复制
#views.py
def ContractView(request):
   form=contractsform(request.POST)
   if form.is_valid():
        con =form.save()
        return redirect("{% url 'contracts' %}", con.id)
   else:
        form = contractsform()
   return render(request, 'contform.html', {'form': form})

#contform.html
                  <div class="card-body">
                    <form action="" method="POST" class="row g-3">
                        {% csrf_token %}
                        <label for="{{ form.subject.id_for_label }}">Name:</label>
                        {{form.name}}
                        <div class="col-md-6">
                            <label for="{{ form.subject.id_for_label }}">Contractor:</label>
                            <div class="input-group input-group-sm mb-3">
                                {{form.contractor}}
                                <button id="new-vendor" class="btn btn-outline-secondary" type="button">+</button>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <label for="{{ form.subject.id_for_label }}">Contractee:</label>
                            {{form.contractee}}
                        </div>
...
                        <div class="col-md-6">
                            <button type="button" onclick="javascript:history.back()">Cancel</button>
                        </div>
                        <div class="col-md-6">
                            <input type="submit" value="Submit" class="btn btn-primary" style="float: right;">
                        </div>

                    </form>

#forms.py
class contractsform(forms.ModelForm):
    class Meta:
        model = Contratos
        fields = '__all__'

        widgets = {
            
            'name': forms.TextInput(attrs ={'class': 'form-control'}),
            'contractee': forms.TextInput(attrs={'class': 'form-control'}),
            'contractor': forms.Select(attrs={'class': 'form-control', 'id': 'contractor_view' }),}

#urls.py
urlpatterns = [
    path('contracts/', views.contratostabla, name='contracts'),
    path('contracts/add/', ContractView, name='new-contract'),
]
EN

回答 2

Stack Overflow用户

发布于 2022-07-01 22:31:44

当前正在将表单重新定义为无效的空窗体,需要更改逻辑,以便在请求方法为POST时使用填充POST数据的表单,在方法获取时使用空表单。在POST无效时,仍然需要使用已填充的表单,以便获得错误和先前的数据

代码语言:javascript
复制
def ContractView(request):
   if request.method == 'POST':
       form = contractsform(request.POST)
       if form.is_valid():
           con = form.save()
           return redirect("{% url 'contracts' %}", con.id)
   else:
        form = contractsform()
   return render(request, 'contform.html', {'form': form})

在可读性方面,约定是将CamelCase用于类,这样您的表单将被命名为ContractsForm,小写带下划线表示函数,因此您的视图将是contract_view

票数 2
EN

Stack Overflow用户

发布于 2022-07-01 22:34:29

您可以这样更新您的视图

代码语言:javascript
复制
def ContractView(request):
   form = contractsform(request.POST or None)
   if form.is_valid():
        con = form.save()
        con.save()
        return redirect("{% url 'contracts' %}", con.id)
   else:
        form = contractsform()
   return render(request, 'contform.html', {'form': form})

我想这能解决你的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72835117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档