【发布时间】:2017-12-10 12:55:53
【问题描述】:
我是 Django 的初学者,并且是第一次询问 :)
我正在关注一个关于为字符串生成 slug 的简单教程(假设是从标题生成的博客文章的 slug)。 也许我正在遵循一个过时的指南,也许我错过了一个基本的东西,我不知道。
Django 2.0
Python 3.6
我正在尝试做一个非常简单的任务,即 slugifying 一个简单的字符串,所以:
- 用户以简单的形式输入字符串
- 点击“保存”时,标题会通过 slugify 并创建 蛞蝓
- 保存。
models.py
from django.db import models
class Testmodel(models.Model):
title = models.CharField(max_length=220)
slug = models.SlugField(unique=True, null=True)
def __str__(self):
return self.title
views.py
from django.views.generic.edit import CreateView
class TestCreate(CreateView):
model = Testmodel
fields = '__all__'
forms.py
from django.forms import ModelForm
from .models import Testmodel
class TestCreateForm(ModelForm):
class Meta:
model = Testmodel
fields = '__all__'
如果我手动输入 slug,直到这里一切正常。为了自动完成,我尝试过:
- 用我的 ModelForm 类覆盖
save()方法。 - 在 CreateView 中覆盖
form_valid()方法 - 覆盖模型本身内的
save()方法。 - 尝试将 pre_save 信号连接到模型。
在所有这 4 次尝试中,我得到了相同的结果:
- 使用 slug 字段生成表单时,我什么也做不了,因为它是必需的。
- 在生成没有 slug 字段的表单时,点击保存时没有任何反应。
我发现躲避这个问题的唯一方法是将 slug 字段也设置为blank = True。不过,我不确定它有多安全?
谢谢!
【问题讨论】:
标签: python django django-models django-forms