Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python get_absolute_url()缺少1个必需的位置参数:';自我';_Python_Django_Python 2.x_Django 3.x_Python 3.x - Fatal编程技术网

Python get_absolute_url()缺少1个必需的位置参数:';自我';

Python get_absolute_url()缺少1个必需的位置参数:';自我';,python,django,python-2.x,django-3.x,python-3.x,Python,Django,Python 2.x,Django 3.x,Python 3.x,我想这个问题的解决方案可以在类似的主题中找到,但是,它似乎与我所看到的问题有点不同 add\u post视图中的redirect应该会将我发送到post类,在那里我有一个get\u absolute\u url 但我碰巧收到以下错误消息:get\u absolute\u url()缺少1个必需的位置参数:“self” 我从字面上复制了编码的表单,以防你想检查它并自己尝试代码 多谢各位 from django.contrib.auth.decorators import user_passes_t

我想这个问题的解决方案可以在类似的主题中找到,但是,它似乎与我所看到的问题有点不同

add\u post
视图中的
redirect
应该会将我发送到
post
类,在那里我有一个
get\u absolute\u url

但我碰巧收到以下错误消息:
get\u absolute\u url()缺少1个必需的位置参数:“self”

我从字面上复制了编码的表单,以防你想检查它并自己尝试代码

多谢各位

from django.contrib.auth.decorators import user_passes_test
from django.shortcuts import redirect, render_to_response, get_object_or_404, render

from .models import Post
from .forms import PostForm, CommentForm

@user_passes_test(lambda u: u.is_superuser)
def add_post(request):
    form = PostForm(request.POST or None)
    if form.is_valid():
        post = form.save(commit=False)
        post.author = request.user
        post.save()
        return redirect(Post) # redirect to Post class
    return render(request, 'blog/add_post.html',{ 'form': form })

def view_post(request, slug):
    post = get_object_or_404(Post, slug=slug)
    form = CommentForm(request.POST or None)
    if form.is_valid():
        comment = form.save(commit=False)
        comment.post = post
        comment.save()
        return redirect(request.path)
    return render(request, 'blog/blog_post.html',{'post': post,'form': form,})

您可以使用
Post
类,而不是它的对象来重定向。因此,您需要在以下位置使用
post

@user_passes_test(lambda u: u.is_superuser)
def add_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.instance.author = request.user
            post = form.save()
            return redirect(post)
    return render(request, 'blog/add_post.html',{ 'form': form })

此外,自2020年1月1日起不再受支持;因此,您可能希望在环境中更新到。

您使用的是
Post
类,而不是要重定向的对象。因此,您需要在以下位置使用
post

@user_passes_test(lambda u: u.is_superuser)
def add_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.instance.author = request.user
            post = form.save()
            return redirect(post)
    return render(request, 'blog/add_post.html',{ 'form': form })

此外,自2020年1月1日起不再受支持;因此,您可能希望在环境中更新到。

谢谢@Willem Van Onsem。但是我得到了一个不同的错误:
quote\u from\u bytes()expected bytes
@Igor:你能分享完整的回溯吗?通过将
Post
更改为
Post
并使用
reverse
可以正确地解决问题。谢谢!:)您构建
视图的语法比我的更“合适”?当我执行代码时,它显示赋值前引用的
局部变量“form”。顺便说一句,我是初学者。谢谢@Willem Van Onsem。但是我得到了一个不同的错误:
quote\u from\u bytes()expected bytes
@Igor:你能分享完整的回溯吗?通过将
Post
更改为
Post
并使用
reverse
可以正确地解决问题。谢谢!:)您构建
视图的语法比我的更“合适”?当我执行代码时,它显示赋值前引用的
局部变量“form”。顺便说一句,我是初学者。
from django.urls import reverse

class Post(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    text = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

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