UpdateView中的自动更新子弹字段

时间:2019-10-30 09:13:31

标签: django django-views slug

我有一个简单的博客,其中的帖子模型包含一个预填充了帖子标题的子词字段。我想知道当用户在viewUpdate中更新帖子标题时如何在后台更新此条:

models.py

class Post(models.Model):
    title = models.CharField(max_length=150)
    content = models.TextField()
    date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(
        CustomUser,
        on_delete=models.CASCADE
    )

    slug = models.SlugField(unique=True)

    def get_absolute_url(self):
        return reverse('post_detail', kwargs={'slug': self.slug})

    def save(self, *args, **kwargs):
        self.slug = self.slug or slugify(self.title)
        super().save(*args, **kwargs)

urls.py

urlpatterns = [
    path('post/<slug:slug>/', views.PostDetailView.as_view(), name='post_detail'),

]

views.py

class PostUpdateView(UpdateView):
    model = Post
    fields = ['title', 'content', 'tags']

我认为我应该在view.py中添加其他内容,以便更新该条,但经过数小时的搜索之后,我找不到了。

如果您需要更多信息,请告诉我。这是一个非常简单的问题,所以我不确定是否应该提供其他任何东西。

1 个答案:

答案 0 :(得分:0)

您可以将echo -n "RELEASE-1.0.0" | sed 's/^RELEASE-\(.*\)$/\1/' 方法更改为:

save

话虽如此,改变弹头本身并不是一个好主意。 URL中通常使用段塞。因此,这意味着,如果class Post(models.Model): # … def save(self, *args, **kwargs): self.slug = slugify(self.title) super().save(*args, **kwargs)的URL例如由用户添加了书签,而标题随后更改,则该URL将不再起作用。在此之前,通常不应修改。实际上,在大多数内容管理系统(CMS)中,该特性不会改变,您可以查看URL来查看文章的原始标题。