【发布时间】:2021-08-23 17:58:14
【问题描述】:
我尝试为我的 django 网站添加博客文章的页面。但它的 slug 模型在添加到添加帖子页面后不会自动生成,但它在管理页面中运行良好。
标题字段中的示例,当我键入如何快速掌握 python 时,它将在 slug 字段中自动生成,仅在管理页面中带有“-”。但是当我在添加帖子页面上键入相同的内容时,它不会自动生成 slug。
我的代码
models.py
from django.db import models
from django.contrib.auth.models import User
from django_summernote.fields import SummernoteTextField
from django.urls import reverse
from django.template.defaultfilters import slugify
STATUS = (
(0,"Draft"),
(1,"Publish")
)
class Post(models.Model):
title = models.CharField(max_length=200, unique=True)
title_type = models.CharField(max_length=50, unique=True)
slug = models.SlugField(max_length=200, unique=True)
author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
updated_on = models.DateTimeField(auto_now= True)
content = SummernoteTextField(blank=True, null=True)
created_on = models.DateTimeField(auto_now_add=True)
status = models.IntegerField(choices=STATUS, default=0)
image = models.ImageField(upload_to='images',null=True, blank=True)
class Meta:
ordering = ['-created_on']
def __str__(self):
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(Post, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse('home')
views.py
class AddPostView(CreateView):
model = Post
form_class = PostForm
template_name = 'add_post.html'
【问题讨论】:
-
这是因为 django admin 编写了一些 JS 来在您键入时动态更新字段值。如果您想要该功能,您可能需要编写一些 JS,但为什么您希望 slug 字段被用户看到?
-
如上所述,一种选择是在 JS 中自己实现
slugify功能,以获得与 django admin 中类似的行为。此外,当您在保存self.slug = slugify(self.title)期间设置 slug 时,您可以从 UI 中删除 slug 字段并依赖于模型保存期间生成的值。
标签: python python-3.x django django-models