get() 得到了一个意外的关键字参数 'pk': django
get() got an unexpected keyword argument 'pk': django
我正在为我的 django 博客创建类似按钮我导入 api 以使用来自 django rest 框架的 ajex 但我收到错误,错误是 get() 得到了一个意外的关键字参数 'pk' 姜戈
view.py
class PostLikeToggle(RedirectView):
def get_redirect_url(self, *args, **kwargs):
obj = get_object_or_404(Post, pk=kwargs['pk'])
url_ = obj.get_absolute_url()
user = self.request.user
if user.is_authenticated:
if user in obj.likes.all():
obj.likes.remove(user)
else:
obj.likes.add(user)
return url_
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions
from django.contrib.auth.models import User
class PostLikeApiToggle(APIView):
authentication_classes = [authentication.SessionAuthentication]
permission_classes = [permissions.IsAuthenticated]
def get(self, request, format=None):
usernames = [user.username for user in User.objects.all()]
return Response(usernames)
def get_redirect_url(self, *args, **kwargs):
obj = get_object_or_404(Post, pk=kwargs['pk'])
url_ = obj.get_absolute_url()
user = self.request.user
updated = False
liked =False
if user.is_authenticated:
if user in obj.likes.all():
liked = False
obj.likes.remove(user)
else:
liked = True
obj.likes.add(user)
updated = True
data = {
"updated":updated,
"liked":liked
}
return Response(data)
urls.py
path('blog/<int:pk>/like/', PostLikeToggle.as_view(),name='Like-Toggle'),
path('blog/api/<int:pk>/like/', PostLikeApiToggle.as_view(),name='Like-Api-Toggle'),
models.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User,on_delete=models.CASCADE)
likes =models.ManyToManyField(User,blank=True,related_name='post_likes')
content = models.TextField()
img = models.ImageField(upload_to='pics',blank=True)
time = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('LoveTravel-Details', kwargs={'pk': self.pk})
def get_like_url(self):
return reverse('Like-Toggle', kwargs={'pk':self.pk})
def get_api_like_url(self):
return reverse('Like-Api-Toggle', kwargs={'pk':self.pk})
有人可以帮我 get() 在该错误中得到一个意外的关键字参数 'pk'
错误很明显。 get
方法缺少参数。
为了解决这个问题:
class PostLikeApiToggle(APIView):
...
def get(self, request, pk, format=None):
为什么会出现该错误?
您的 urls.py
将路径定义为 'blog/<int:pk>/like/'
。 Django 将解析 url 并调用视图的方法 - 在您的情况下 - 使用组 names/values 作为关键字参数 - 请参阅 the point 4 of the documentation 了解有关 Django 如何处理请求的更多详细信息。
我正在为我的 django 博客创建类似按钮我导入 api 以使用来自 django rest 框架的 ajex 但我收到错误,错误是 get() 得到了一个意外的关键字参数 'pk' 姜戈
view.py
class PostLikeToggle(RedirectView):
def get_redirect_url(self, *args, **kwargs):
obj = get_object_or_404(Post, pk=kwargs['pk'])
url_ = obj.get_absolute_url()
user = self.request.user
if user.is_authenticated:
if user in obj.likes.all():
obj.likes.remove(user)
else:
obj.likes.add(user)
return url_
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions
from django.contrib.auth.models import User
class PostLikeApiToggle(APIView):
authentication_classes = [authentication.SessionAuthentication]
permission_classes = [permissions.IsAuthenticated]
def get(self, request, format=None):
usernames = [user.username for user in User.objects.all()]
return Response(usernames)
def get_redirect_url(self, *args, **kwargs):
obj = get_object_or_404(Post, pk=kwargs['pk'])
url_ = obj.get_absolute_url()
user = self.request.user
updated = False
liked =False
if user.is_authenticated:
if user in obj.likes.all():
liked = False
obj.likes.remove(user)
else:
liked = True
obj.likes.add(user)
updated = True
data = {
"updated":updated,
"liked":liked
}
return Response(data)
urls.py
path('blog/<int:pk>/like/', PostLikeToggle.as_view(),name='Like-Toggle'),
path('blog/api/<int:pk>/like/', PostLikeApiToggle.as_view(),name='Like-Api-Toggle'),
models.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User,on_delete=models.CASCADE)
likes =models.ManyToManyField(User,blank=True,related_name='post_likes')
content = models.TextField()
img = models.ImageField(upload_to='pics',blank=True)
time = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('LoveTravel-Details', kwargs={'pk': self.pk})
def get_like_url(self):
return reverse('Like-Toggle', kwargs={'pk':self.pk})
def get_api_like_url(self):
return reverse('Like-Api-Toggle', kwargs={'pk':self.pk})
有人可以帮我 get() 在该错误中得到一个意外的关键字参数 'pk'
错误很明显。 get
方法缺少参数。
为了解决这个问题:
class PostLikeApiToggle(APIView):
...
def get(self, request, pk, format=None):
为什么会出现该错误?
您的 urls.py
将路径定义为 'blog/<int:pk>/like/'
。 Django 将解析 url 并调用视图的方法 - 在您的情况下 - 使用组 names/values 作为关键字参数 - 请参阅 the point 4 of the documentation 了解有关 Django 如何处理请求的更多详细信息。