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})