【问题标题】:dropdown choice argument to a db function inside python script on the fly动态python脚本中的db函数的下拉选择参数
【发布时间】:2012-07-17 09:23:05
【问题描述】:

我有一个包含这些字段的 django modelForm:

nod_id1 = models.ForeignKey('Eonodes',..)
nod_id2 = models.ForeignKey('Eonodes',..)

按预期呈现为下拉列表。

我想做以下事情: 当用户从两个列表中选择一个选项时,需要执行一个 python 脚本,该脚本调用一个带有用户两个选项的参数的 db 函数。我希望将函数返回的内容保存到表单的其他字段 (directiondb = models.IntegerField())。 脚本可能是这样的:

cursor = connection.cursor()
cursor.execute("SELECT GETDIRECTIONDB(262,265) from sys.dual")
result = cursor.fetchall()

其中 262,265 是用户选择。

我的意思是在提交数据之前如何即时完成?

【问题讨论】:

  • 您的第一行提到“a django modelForm” - 我认为它应该是“a django model”(模型表单是从模型生成的表单。

标签: javascript python ajax database django


【解决方案1】:

覆盖模型的保存方法以在保存数据之前执行自定义操作。 https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-model-methods

def get_direction_db(self.nod_id1, self.nod_id2):
    cursor = connection.cursor()
    cursor.execute("SELECT GETDIRECTIONDB(262,265) from sys.dual")
    result = cursor.fetchall()
    return result[0]  # or whatever

class MyModel(models.Model):
    nod_id1 = models.ForeignKey('Eonodes',..)
    nod_id2 = models.ForeignKey('Eonodes',..)
    directiondb = models.IntegerField()

    def save(self, *args, **kwargs):
        self.directiondb = get_direction_db(self.nod_id1, self.nod_id2)
        super(MyModel, self).save(*args, **kwargs)

【讨论】:

  • 太棒了!你知道如果我没有字段 directiondb 并且我只是希望 get_direction_db 的返回值在用户节点选择之后显示在表单上,​​我该怎么做?
  • 所以用户从下拉列表中进行选择,然后使用 get_driection_db() 中的值动态更新表单?您需要做的是使用 JavaScript 将事件处理程序添加到下拉列表中。事件处理程序将使用 AJAX 调用将节点值传递回您的 Web 应用程序,并将使用结果更新表单。你很可能想使用 jQuery。
  • 是的,没错。我只是不知道我将如何做到这一点,因为我的下拉列表是通过 modelFroms 中的外键字段而不是通过典型的 Select/html 等呈现的。
  • modelForm 只生成一个带有常规 HTML select 元素的常规 HTML 表单。查看呈现页面的 HTML 源代码 - 很简单。我建议使用 jQuery 来操作表单。在浏览器的 JS 控制台中执行此操作,以便您可以快速试验和学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 2017-07-14
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2019-06-04
相关资源
最近更新 更多