Django中从弹出表单保存数据的问题

wfsdck30  于 2023-03-31  发布在  Go
关注(0)|答案(1)|浏览(129)

我在通过django将数据从popup form保存到sqlite database时遇到问题。
我的部件代码:

**dash.html:**弹出表单按钮

<div class="card-footer clearfix">
    <a href="" type="button" class="btn btn-primary float-right" data-toggle="modal" data-target="#newItem"><i class="fas fa-plus"></i> Add item</a>
  </div>

弹出代码

<div class="modal-content">

    <div class="card card-success">
          <div class="card-header">
            <h3 class="card-title"><b>Add Item</b></h3>
          </div>
          <div class="card-body">
            <form action="" method="post">
                {% csrf_token %}
                  <div class="row">
                      <div class="col-sm-6">
                          <div class="form-group">
                              <label> Item Name:</label>
                              <input class="form-control form-control-lg" name="item_name" type="text" placeholder="Item name">
                          </div>
                      </div>
                      <div class="col-sm-6">
                        <!-- text input -->
                          <div class="form-group">
                              <label> Item size:</label>
                              <input class="form-control form-control-lg" name="item_size"type="text" placeholder="Item size">
                          </div>
                      </div>

          <!-- /.card-body -->
           <div class="modal-footer">
            <input type="submit" class="btn btn-default" value="submit"></input>
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>

           </div>
  </div>

</div>

popup代码是dash.html的一部分

models.py:

class itemModel(models.Model):
    name = models.CharField(max_length=50)
    size = models.CharField(max_length=20)

    def __str__(self):
        return self.name

我使用SQLITE3作为默认数据库。

表格.py:

from django import forms
from .models import itemModel

class itemForm(forms.ModelForm):
    class Meta:
        model = itemModel
        fields = ["item_name", "item_size"]

浏览次数.py:

from django.shortcuts import redirect
from dashboard.models import addItem

    def addItem(request):
        if request.method == "POST":
            name = request.POST['item_name']
            size = request.POST['item_size']
    
            itemModel.objects.create(Name=name, size=size)
    
            return redirect('dashboard')

网址.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.dashBoard, name='dashboard'),
    path('addItem/', views.addItem, name='newItem'),
]

如何执行'views.addItem'当点击弹出窗口上的添加按钮?

4nkexdtk

4nkexdtk1#

在你的模型中没有item_nameitem_size这样的字段。你可以使用django表单为这些字段添加属性:
forms.py

class itemForm(forms.ModelForm):
    class Meta:
        model = itemModel
        fields = ["name", "size"]
        widgets = {
            'name': forms.TextInput(attrs={
                'class': 'form-control form-control-lg',
                'placeholder': 'Item name'
            }),
            'size': forms.TextInput(attrs={
                'class': 'form-control form-control-lg',
                'placeholder': 'Item size'
            }),
        }

在模板上,您混合了modalcard结构样式。此外,使用itemForm可以获得更清晰的模板和视图:
views.py

def dashBoard(request):
    return render(request, 'dashboard.html', {'form': itemForm()})

def addItem(request):
    if request.method == "POST":
        form = itemForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect(reverse('dashboard'))

dashboard.html

{% block content %}
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
    Add Item
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">Add Item</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>

            <form action="{% url 'newItem' %}" method="POST">
                <div class="modal-body">
                    {% csrf_token %}
                    <div class="row">
                        <div class="col-sm-6">
                            <div class="form-group">
                                {{form.name.label}}
                                {{form.name}}
                            </div>
                        </div>
                        <div class="col-sm-6">
                            <div class="form-group">
                                {{form.size.label}}
                                {{form.size}}
                            </div>
                        </div>
                    </div>

                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
                    <button type="submit" class="btn btn-primary">Submit</button>
                </div>
            </form>
        </div>
    </div>
</div>
{% endblock content %}

相关问题