Python django URL多对象返回错误

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'), 但是,如果两个不同的用户都使用相同的确

我正在用Django制作一个简单的网络应用程序。用户可以拥有一个配置文件,并在该配置文件下创建一篇博客文章

例如:

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