与用户返回相关的模型的Django Listview;“无用户”;错误
我正在尝试生成一个用户地址列表,以便用户可以查看、更新、删除等 目前,我使用的ListView具有:与用户返回相关的模型的Django Listview;“无用户”;错误,django,Django,我正在尝试生成一个用户地址列表,以便用户可以查看、更新、删除等 目前,我使用的ListView具有: class AddressListView(LoginRequiredMixin, ListView): model = Address def get_object(self): return self.model.objects.get(user=self.request.user.pk) 使用地址模型: class Address(models.Mode
class AddressListView(LoginRequiredMixin, ListView):
model = Address
def get_object(self):
return self.model.objects.get(user=self.request.user.pk)
使用地址模型:
class Address(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
house_name = models.CharField(max_length=255, null=True)
house_number = models.CharField(max_length=255, null=True)
street_name = models.CharField(max_length=255, null=True)
.......
以及url模式:
....
url(
regex=r'^address/$',
view=views.AddressListView.as_view(),
name='address_list'
),
...
但是,当我尝试请求该视图时,我得到一个错误“未找到页面(404),未找到与查询匹配的用户”
错误是:
因为您正在编写列表视图,所以应该重写
get\u queryset
(返回对象的查询集),而不是get\u object
(返回单个对象)
其次,您得到的是404,因为错误的视图正在处理请求。Django使用第一个匹配的URL模式,在本例中,address/
由regexr'^(?P[\w.@+]+])/$
匹配,因此Django尝试查找用户名为“address”的用户
您可以通过将
地址\u列表
URL模式移动到详细信息
URL模式上方来解决此问题,但如果将来有一个用户名为“address”的用户,这将阻止您查看详细信息
页面。另一个选项是更改一个或两个正则表达式,使它们不会冲突,例如r'^(?P[\w.@+-]++)/detail/'
从查询中删除
.pk
,Django会自动为您执行此操作
return self.model.objects.get(user=self.request.user)
或者向用户添加\u id
:
return self.model.objects.get(user_id=self.request.user.pk)
说得好,谢谢,但是在做了这些修改后,我仍然会得到相同的错误。我不知道你会怎么得到这个错误。您确定视图正在处理该请求吗?上面是否有其他模式匹配?谢谢,这正是问题所在,Django试图找到用户名为“address”的用户,请显示完整的错误消息。奇怪的是,UserDetailView引发了错误,但它有url模式:url(regex=r'^(?P[\w.@+-]+)/$,view=views.UserDetailView.as_view(),name='detail'),
return self.model.objects.get(user_id=self.request.user.pk)