Python django URL多对象返回错误
我正在用Django制作一个简单的网络应用程序。用户可以拥有一个配置文件,并在该配置文件下创建一篇博客文章 例如:Python django URL多对象返回错误,python,django,Python,Django,我正在用Django制作一个简单的网络应用程序。用户可以拥有一个配置文件,并在该配置文件下创建一篇博客文章 例如: "path('profile/<int:pk>/',profile, name='profile')" 然后,用户可以编写在URL中包含名称的博客文章 例如: path('profile/<int:pk>/blog/<str:name>',Blogs, name='Blogs'), 但是,如果两个不同的用户都使用相同的确
"path('profile/<int:pk>/',profile, name='profile')"
然后,用户可以编写在URL中包含名称的博客文章
例如:
path('profile/<int:pk>/blog/<str:name>',Blogs, name='Blogs'),
但是,如果两个不同的用户都使用相同的确切名称命名他们的博客,我会得到一个“MultipleObjectsReturn”错误
我认为,通过在URL中更早地使用用户PK,可以确保它是唯一的,即使两个博客被称为完全相同的东西
视图.py
def Blog(request, pk, name):
blog = Restaurant.objects.get(name=name)
user = CustomUser.objects.get(pk=pk)
if not user.id == request.user.pk:
raise PermissionDenied()
else:
context = {
'user': user,
'blog': blog,
}
return render(request, 'blog/blogs.html',context)
有没有办法不用博客的PK来解决这个问题?
如果有人能解释为什么我的逻辑是错误的,而且它一开始就不起作用
谢谢。您需要使
名称
字段唯一,如果您想使用:
class餐厅(models.Model):
name=models.CharField(unique=True,…)
slug=models.SlugField(unique=True,…)
...
您需要确保获得该用户姓名的博客。我不知道你的博客模型到底是什么样子的,但它会是这样的
user = CustomUser.objects.get(pk=pk)
blog = Restaurant.objects.get(name=name, user=user)
在模型上,使用“unique_together”属性确保用户名和博客名的组合是唯一的,否则这些URL将无法工作。在George的回答中,没有必要使用完全唯一的名称,这意味着用户无法使用其他用户已经制作的标题创建博客文章。显示代码,说明您是如何创建的filter@shafik,我编辑了问题,包括视图、函数命名、使用snake_案例pls、,并使用django.shortcuts.get_object_或_404。回答得好,非常感谢!很好地解决了这个问题(以及未来的问题)。干杯
def Blog(request, pk, name):
blog = Restaurant.objects.get(name=name)
user = CustomUser.objects.get(pk=pk)
if not user.id == request.user.pk:
raise PermissionDenied()
else:
context = {
'user': user,
'blog': blog,
}
return render(request, 'blog/blogs.html',context)
user = CustomUser.objects.get(pk=pk)
blog = Restaurant.objects.get(name=name, user=user)