模型表单中的 Django auto slug

Posted

技术标签:

【中文标题】模型表单中的 Django auto slug【英文标题】:Django auto slug in Model Forms 【发布时间】:2016-06-17 11:27:49 【问题描述】:

您好,我正在尝试通过我的表单中的 JS 实现自动 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 字段,他可以对其进行编辑,但在编辑之前,我想根据他在字段“名称”中输入的内容自动设置我的 slug。 In Admin 是这样的。

在网上搜索,我发现 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:

未捕获的 SyntaxError:无效的正则表达式: /�|O|U|o|u|a|?|d|e|p|s|t|f|G|T|S|F|i|I|g|A|c|n|r|C |D|E|N|R|l|z|L|Z|k|K/: 没有什么可重复的

错误 2:

未捕获的类型错误:无法读取未定义的属性“替换”

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢!希望它有所帮助。 :)

以上是关于模型表单中的 Django auto slug的主要内容,如果未能解决你的问题,请参考以下文章

通过避免 django 模型保存方法中的完整性错误来增加 slug

Django:两个模型中的一个 url 搜索(cbv)

Django:为数据库中的现有条目生成 slug 字段数据

在 Django 中清理表单数据

如何在 Django 中自定义 slug 字段?

Django中的“slu”是什么?