【问题标题】:Django - How to auto populate form field from two others fieldsDjango - 如何从其他两个字段自动填充表单字段
【发布时间】:2011-06-10 09:14:15
【问题描述】:

这就是我要找的。在我的表单中,我有三个字段,都是 CharFields。这些是姓名,姓氏和用户名。用户名应设置为姓名和姓氏的总和,因此姓名 = 乔,姓氏 = 黑色,用户名 = 乔·布莱克。

在显示表单时,所有字段都为空。我希望它在我将数据写入姓名或姓氏时自动填充用户名。这样做的原因是我不必填写用户名字段,但是当我愿意时,我可以将其设置为不同于姓名 + 姓氏。

不使用jQuery可以吗?如果是这样,有什么好的教程吗?

【问题讨论】:

  • 如果你想在客户端做,你应该使用 JavaScript,有或没有 jQuery。
  • 这就是我试图省略的。我记得大约一年前在某个教程中看到,有一种方法可以自动填充 SlugField,但我现在不知怎么找不到了。

标签: django forms auto-populate


【解决方案1】:

javascript

<script type="text/javascript" charset="utf-8">

    function updateUsername(){
        first = document.getElementById("first").value;
        last = document.getElementById("last").value;
        document.getElementById("username").value = first+" "+last;
    }

</script>

那么你需要给你的 3 个输入字段 ID。

这是一个例子

<input type="text" name="some_name" value="" id="first" onkeyup="updateUsername();">
<input type="text" name="some_name" value="" id="last" onkeyup="updateUsername();">
<input type="text" name="some_name" value="" id="username">

基本上,当#first 和#last 字段被输入时,它会运行updateUsername() 函数,该函数获取它们的值并将#username 的值更改为它们。

编辑

如果您想使用 django 执行此操作,请编辑您的模型并覆盖保存方法。

def save(self):
    if not self.id:
        self.username = self.first + self.last
    super(MODLE_NAME, self).save()

当你使用 save() 方法时,它会获取第一个和最后一个属性并更新用户名值并保存它。

【讨论】:

  • 其实我一直在寻找一个纯粹的django解决方案,没有js。但是……这个太简单了,我明明可以给+1。如果没有更好的答案(不使用js),我会接受这个。
  • 如果没有 javascript,您将无法做到这一点。 django 最接近的另一种方法是保存模型,然后根据名字和姓氏自动生成用户名。但这不会给你一种“现场打字”的感觉。
  • 我想,这就是这个话题的全部内容。谢谢。
  • 请注意,当覆盖 save 方法时,您应该像这样传递参数:save(self, *args, **kwargs)super(MODEL_NAME, self).save(*args, **kwargs)
猜你喜欢
  • 2020-11-01
  • 2011-01-20
  • 2021-05-25
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 2012-06-26
  • 2012-02-18
相关资源
最近更新 更多