在管理面板中更新现有主题时,子弹值会更改。
第一次更新的示例是:
发布/测试发布。
下一个更新显示为:
post / testpost-1
因为当我返回网站并刷新页面时值会更改;
因此,我收到页面未找到错误(404)
如何解决此问题?
models.py
class Post(models.Model):
slug = models.SlugField(unique=True, editable=False, max_length=130, null=True, blank=True, allow_unicode=True)
def get_unique_slug(self):
slug = slugify(self.title.replace('ı', 'i'))
unique_slug = slug
counter = 1
while Post.objects.filter(slug=unique_slug).exists():
unique_slug = '{}-{}'.format(slug, counter)
counter += 1
return unique_slug
def save(self, *args, **kwargs):
self.slug = self.get_unique_slug()
return super(Post, self).save(*args, **kwargs)
views.py
def post_detail(request, slug):
post = get_object_or_404(Post, slug=slug)
def post_update(request, slug):
if not request.user.is_superuser:
return HttpResponse ("Lütfen giriş yapınız")
post = get_object_or_404(Post, slug=slug)
form = PostForm(request.POST or None, request.FILES or None, instance=post)
if form.is_valid():
form.save()
messages.success(request, 'Başarılı bir şekilde güncellediniz.')
return HttpResponseRedirect(post.get_absolute_url())
context = {
'form': form,
}
return render(request, 'post/form.html', context)
def post_delete(request, slug):
if not request.user.is_superuser:
raise Http404()
post = get_object_or_404(Post, slug=slug)
post.delete()
return redirect('post:index')
url.py
urlpatterns = [
path('index/',views.post_index, name='index'),
path('create/',views.post_create, name='create'),
path('<slug>',views.post_detail, name='detail'),
path('<slug>/update/',views.post_update, name='update'),
path('<slug>/delete/',views.post_delete, name='delete'),
]
我认为您忘记在保存方法中添加if ...条件,请尝试以下,
class Post(models.Model):
# other code
def save(self, *args, **kwargs):
if not self.slug:
self.slug = self.get_unique_slug()
return super(Post, self).save(*args, **kwargs)