如何从 Django 页面的文本字段中获取输入,然后使用响应更新 SQL 表?

Posted

技术标签:

【中文标题】如何从 Django 页面的文本字段中获取输入,然后使用响应更新 SQL 表?【英文标题】:How can I take input from a text field in a Django page then update a SQL table with the response? 【发布时间】:2020-03-21 00:10:31 【问题描述】:

我正在开发一个用于清理非活动 Tableau 工作簿的网站。登录此站点将允许我的用户查看他们的旧工作簿并决定保留哪些工作簿。

这将通过从 html 页面获取一些简单的文本输入来完成,K 表示保留 | D 删除。

然后,用户的响应将存储为 Python 变量,该变量将进入 if then 语句。 if then 语句基本上会更新 SQL 中的每一行,将 K 或 D 添加到名为“Marked_for_Deletion”的列中。

从那里,存储过程将运行,检查该列,并删除所有标有 D 的内容。

这可行吗?如果是这样,我将如何提取该输入并确保将其添加到正确的列/行?如果没有,您能否就我可以使用的替代方法提供任何建议?

谢谢!

编辑:这是我的表格的代码。

 <table class="blueTable">
        <thead>
            <tr>
                <th>Workbook Name</th>
                <th>Deletion Deadline</th>
                <th>Keep or Delete?</th>
            </tr>
        </thead>
        <tbody>
            % for book in Workbooks %
            <tr>
                <td> book.name </td>
                <td> book.owner_name </td>
                <td>
                    <label class="container" style="margin-bottom: 25px">
                        <input type="text" placeholder="(Enter K for Keep, D for Delete)">
                    </label>
                </td>
            </tr>
            % endfor %
        </tbody>
    </table>
    <form method="post">
        % csrf_token %
        <button type="submit" name="run_script">Submit</button>
    </form>
</body>

</html>

我希望能够从最后一个 td 标记中提取输入并将其存储在下面的提交按钮中。

【问题讨论】:

嗨,NTWorthy。你能提供一个minimal reproducible example吗?回答您的第一个问题:这很可行,但我会使用布尔字段而不是字符。 @EliakinCosta 我添加了一些内容,这是否足以提供帮助,或者您是否需要更多信息? 谢谢,@NTWorthy。 【参考方案1】:

我有点晚了,但我希望它可以帮助你。

urls.py

from django.urls import path

from workbook_app import views

app_name = 'workbook_app'

urlpatterns = [
    path('books/', views.BookListView.as_view(), name='books'),
    path('keep_or_delete/<int:pk>/', views.KeepOrDeleteView.as_view(), name='keep_or_delete'),
]

models.py

from django.db import models


class Book(models.Model):
    name = models.CharField(max_length=250)
    owner_name = models.CharField(max_length=250)
    marked_for_deletion = models.BooleanField(default=False)

views.py

from django.views.generic import ListView
from workbook_app.models import Book
from django.http import HttpResponse, HttpResponseRedirect
from django.views import View
from django.urls import reverse



class BookListView(ListView):
    template_name = 'workbook_app/books.html'

    def get_queryset(self):
        return Book.objects.all()


class KeepOrDeleteView(View):

    def post(self, request, pk):
        book = Book.objects.get(pk=pk)
        print(book, book.marked_for_deletion, not book.marked_for_deletion)
        book.marked_for_deletion = not book.marked_for_deletion
        book.save()

        url = reverse('workbook_app:books')
        return HttpResponseRedirect(url)

books.html

<div class="container">
<h2>Books</h2>
<table class="table">
  <tr>
    <th>Workbook Name</th>
    <th>Deletion Deadline</th>
    <th>Keep or Delete?</th>
  </tr>
  % for book in object_list %
  <tr>
    <td>book.name</td>
    <td>book.owner_name</td>
    <td>
      <form action="% url 'workbook_app:keep_or_delete' pk=book.pk %" method="POST">
        % csrf_token %
        <button type="submit" class="btn btn-%if book.marked_for_deletion %primary% else%danger% endif %">%if book.marked_for_deletion %Keep% else%Delete% endif %</button>
      </form>
    </td>
  </tr>
  %endfor%
</table>

附:我不处理异常、消息等。你只需要自己弄清楚或提出一个新问题。

【讨论】:

非常感谢!我真的很感激帮助。现在已将其标记为答案!

以上是关于如何从 Django 页面的文本字段中获取输入,然后使用响应更新 SQL 表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jQuery从输入字段中获取图像

如何使用python套接字从html获取输入

django 显示文本字段

如何从文本字段中获取值并读取按键事件

如何在 django 模型中从一个字段添加多个输入

从 Django 中的文本字段填充管理表单