【问题标题】:Django running a python function from views using checkbox widgetDjango使用复选框小部件从视图中运行python函数
【发布时间】:2020-08-28 19:22:42
【问题描述】:

我正在创建一个 Django 项目。我的数据库中有很多数据,我正在通过表格将其呈现到我的模板中。每列对应于我的数据库中的字段。除此之外,我的应用程序允许用户对选定的数据执行一些操作。我希望用户能够通过单击按钮来运行这些操作(通过views 中的函数)。

很明显,让用户为每一行单击一个按钮会很乏味。所以我认为最好让他们点击相应行的复选框,然后让他们点击一个按钮来运行我的项目中的特定功能。

请原谅我,但我不知道如何处理这种设置。我已经阅读了有关复选框小部件的信息,但是如果它们选中了复选框,我如何才能对在 HTML 模板上呈现的一组对象运行函数。

感谢您的指导!


这是我所拥有的模板 sn-p:

<table class="table">
    <thead class="thead-dark">
        <tr>
            <th scope="col">ID</th>
            <th scope="col">Name</th>
            <th scope="col">Email</th>
            <th scope="col">Major</th>
            <th scope="col">Promote</th>
        </tr>
    </thead>
    <tbody>
        {% for s in list %}
            <tr>
                <th scope="row">{{s.student_id}}</th>
                <td>{{s.user.username}}</td>
                <td>{{s.user.email}}</td>
                <td>{{s.major}}</td>
               <td><a type="button" class="btn btn-success" href="{% url 'emailPage' s.student_id%}">Make Tutor</a></td> 
            </tr>
   </tbody>
</table>

尝试将每一行按钮替换为一键单击系统。我从我的观点传递 masterList。

models.py

class masterList(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="student")

    student_id = models.IntegerField(primary_key=True, null=False, validators=[MaxValueValidator(999999), MinValueValidator(100000)])
    phone = PhoneField(blank=False, help_text='best number to contact you')
    major = models.CharField(max_length=500, blank=False)
    eof = models.BooleanField(blank=False, choices = [(True, 'Yes'), (False, 'No')])
    arc = models.BooleanField(blank=False, choices = [(True, 'Yes'), (False, 'No')])

    class Meta():
        verbose_name = 'Student Info'
    
    def __str__(self):
        return self.user.username

【问题讨论】:

  • 您能否发布一些代码 sn-ps 以帮助阐明向用户显示的数据结构以及用于更改数据的方法。您描述了单击按钮和分配给行的按钮,但是我正在努力想象您当前的状态和最终目标。
  • @Display_name 我更新了我的帖子
  • 你说你想要“让他们点击相应行的复选框,然后让他们点击一个按钮来运行我的项目中的特定功能。”我想确认你的意思是“行”而不是“列”。如果是这样,将一个html按钮放在表外并将其链接到视图中的for循环函数不是最简单的吗?这听起来像你想要的吗?类似于 Django 管理员中用于删除用户的内容?
  • @Display_name 这正是我想要的。
  • @Display_name 我将如何运行一些代码循环浏览视图并确定它是否已被检查。为此在黑暗中。也许您的答案中有演示?

标签: django django-forms django-templates


【解决方案1】:

我绝不是这方面的专家,我见过人们通过实时重新加载和视图之外的逻辑来做到这一点(我听说这被忽视了)但这是我通常串在一起的一般格式像这样的事情:

# models.py

class ListModel(models.Model):
    . . .
    student_id = models.Field()


# views.py

    if request.POST.get('expel_all_students'):
        for student_id in table:
            expelled_students_id = str(request.POST.get('expelled_student'))
            expelled_student_instance = ListModel.objects.get(id = expelled_students_id)
            student_id.rm(expelled_student_instance)

# templates.py
<button type="submit" value='expel_all_students' name="expel_all_students"> Expel all students </button>

<table>
    . . . 

这里的关键是按钮值由视图中的 if 语句拾取,当单击提交按钮时触发函数的操作。这就是我的朋友的魔力。

【讨论】:

  • 这行得通,但我如何通过单击 SELECTED ITEMS 的按钮来运行该功能,即复选框选中的项目
猜你喜欢
  • 1970-01-01
  • 2012-05-29
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 2019-09-18
  • 2015-03-14
相关资源
最近更新 更多