Django Slug Number Issues

问题描述 投票:0回答:1

在管理面板中更新现有主题时,子弹值会更改。

第一次更新的示例是:

发布/测试发布。

下一个更新显示为:

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'),
]
python django slug
1个回答
0
投票

我认为您忘记在保存方法中添加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)
© www.soinside.com 2019 - 2024. All rights reserved.