📜  SlugField – Django 表单(1)

📅  最后修改于: 2023-12-03 15:20:09.767000             🧑  作者: Mango

SlugField – Django 表单

在 Django 中,SlugField 是一种常用的表单字段类型。SlugField 字段允许我们为某个对象生成一个唯一的、易读的标识符,通常用于URL的构建。本文将会介绍 SlugField 字段的常见用法和示例代码。

SlugField 字段用法

在 Django 中,我们可以在模型中定义 SlugField 字段,如下所示:

from django.db import models

class Blog(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    content = models.TextField()

上面的代码定义了一个名为 Blog 的模型,它包含三个字段:title、slug 和 content。其中,slug 字段是 SlugField 类型的,它设置了 unique=True 属性,表示每个对象的 slug 属性都应该是唯一的。

我们可以在后台管理中创建一个 Blog 对象,并为它设置一个 slug 属性。Slug 属性通常是一个友好的、易读的 URL 片段,比如 "my-first-blog-post"。

在表单中,可以使用 SlugField 字段来允许用户输入一个 slug 属性。例如,在一个表单类中定义一个 slug 字段:

from django import forms
from myapp.models import Blog

class BlogForm(forms.ModelForm):
    class Meta:
        model = Blog
        fields = ['title', 'slug', 'content']
    
    slug = forms.SlugField(label='Slug')

上面的代码中,我们定义了一个名为 BlogForm 的表单类,它继承自 ModelForm。在表单中,我们指定了模型为 Blog,然后指定了需要在表单中显示的字段。最后,我们定义了一个名为 slug 的表单字段,它是 SlugField 类型的。

SlugField 字段示例代码

下面是一个完整的示例代码,展示了如何使用 SlugField 字段。在这个示例中,我们会创建一个包含一个 SlugField 字段的表单,用于新建一个博客对象。

# models.py
from django.db import models

class Blog(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    content = models.TextField()

# forms.py
from django import forms
from myapp.models import Blog

class BlogForm(forms.ModelForm):
    class Meta:
        model = Blog
        fields = ['title', 'slug', 'content']
    
    slug = forms.SlugField(label='Slug')

# views.py
from django.shortcuts import render
from myapp.forms import BlogForm

def create_blog(request):
    if request.method == 'POST':
        form = BlogForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/blogs/')
    else:
        form = BlogForm()
    return render(request, 'create_blog.html', {'form': form})

# create_blog.html
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="保存">
</form>

在上面的示例中,我们首先定义了一个名为 Blog 的模型,它包含了 title、slug 和 content 三个字段。其中,slug 字段是 SlugField 类型的,它设置了 unique=True 属性,表示每个对象的 slug 属性都应该是唯一的。

然后,我们定义了一个名为 BlogForm 的表单类,它继承自 ModelForm。在表单中,我们指定了模型为 Blog,然后指定了需要在表单中显示的字段。最后,我们定义了一个名为 slug 的表单字段,它是 SlugField 类型的。

在视图函数 create_blog 中,我们首先判断请求的方法是否为 POST。如果是,表示用户提交了表单,我们就将表单数据进行校验,并保存表单数据。如果不是 POST,我们就创建一个空的表单。

在模板中,我们使用 Django 表单渲染器将表单渲染成 HTML 代码。同时,我们也要在表单中添加一个 CSRF Token,以增强安全性。

最终,我们得到了一个包含一个 SlugField 字段的表单,可以用于新建一个博客对象。