模型表格中的Django auto slug

时间:2016-03-03 22:06:22

标签: javascript django django-models django-forms slug

您好,我正在尝试通过我的表单中的JS实现auto slug功能,以下是我的代码。

我的模特:

class Sponsor(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=150)

我的表格:

class SponsorForm(ModelForm):

    class Meta:
        model = Sponsor
        fields = ['name', 'slug', 'image', 'phone', 'website', 'address', 'city', 'state', ]
        exclude = ('created_by', )

正如你所看到的,我想向用户显示slug字段并且他可以编辑它,但在编辑之前我想根据他在字段“name”中输入的内容自动设置我的slug。在管理员就是这样。

在互联网上搜索,我发现Django核心有这个文件: urlify.js ,真棒。到目前为止我所做的是:

<script src="{% static "js/urlify.js"%}"></script>
<script type="text/javascript">

$(function() {
    $( "#id_name" ).keyup(function() {
        $("#id_slug").val(URLify($("#id_name").value, 150));
    });
});
</script>

我得到的只是控制台中的这些错误

错误1:

  

Uncaught SyntaxError:无效的正则表达式:   / | O | U | O | U |一个| | d | E | P | S | T | F | G | T | S | F | I | I |克| A | C | N | R | C | d |电子| N | R |升| Z | L | Z | K | K /:   无需重复

错误2:

  

未捕获的TypeError:无法读取未定义

的属性'replace'

任何帮助或想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

这相当于信任客户端(即允许浏览器提交您无法控制的字段),这绝不是一个好主意。这意味着恶意用户可以绕过您的代码并为模型的slug传递任何值,这不太可能是期望的行为。

相反,在服务器上执行此操作:根据模型的名称将模型的save(...)方法覆盖到模型的第一个set the slug,然后通过super继续执行常规保存方法以执行回到Django。