【问题标题】:User matching query does not exist - django用户匹配查询不存在 - django
【发布时间】:2015-03-13 17:43:44
【问题描述】:

我有一个页面显示用户及其关于。其中,有一个链接可以更新他们的about。但是当我打开该链接时,它会向我显示此错误:

DoesNotExist at /profile/user/update_about/

User matching query does not exist.

并且回溯突出显示了这一行,它来自视图中的profile 方法:

13.  user = User.objects.get(username=unquote(user_name)) 

但是,当我加载 profile 方法时,不会发生此错误。它只发生在视图中的update_profile 方法上。

views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from urllib import unquote

from django.contrib.auth.models import User

from models import About
from forms import AboutForm
# Create your views here.


def profile(request, user_name):
    user = User.objects.get(username=unquote(user_name))
    about = About.objects.get_or_create(user=user)
    about = about[0]

    return render(request, 'user_profile.html', {
        'user':user,
        'about_user':about
    })

def update_about(request, user_name):
    user = User.objects.get(username=unquote(user_name))
    if request.method == 'POST':
        form = AboutForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/')
    else:
        about = About.objects.get(user=user)
        form = AboutForm(initial={'dob':about.dob})
        return render(request, 'update_about.html',{
            'form':form
        })

urls.py

urlpatterns = patterns('',
    # Examples:
    url(r'(?P<user_name>[\w@%.]+)/$', 'user_related.views.profile', name='profile'),
    url(r'(?P<user_name>[\w@%.]+)/update_about/$', 'user_related.views.update_about', name='update_about'),

这是什么原因造成的?您的帮助将不胜感激。谢谢。

【问题讨论】:

  • /profile/user/update_about/的url中,user是实际用户名吗?
  • 所以看起来您的数据库中没有用户名为“user”的用户。
  • 您的个人资料 URL 似乎正在捕获 URL“user/update_about/”,这是不应该的。这些是您使用的确切正则表达式吗?
  • @Rohan 不,有。事实上 admin 的用户名是 user.
  • @DanielRoseman 是的。我只是复制并粘贴到这里。

标签: django django-views django-users


【解决方案1】:

您忘记在正则表达式的第一个位置添加插入符号 (^)。所以第一个正则表达式匹配 url 的“update_about/”部分。

固定代码:

url(r'^(?P<user_name>[\w@%.]+)/$', 'user_related.views.profile', name='profile'),
url(r'^(?P<user_name>[\w@%.]+)/update_about/$', 'user_related.views.update_about', name='update_about'),

【讨论】:

  • 这不是路由问题,因为找到了视图。 user_name 参数有问题。
  • 哦!现在我明白了,对不起。
猜你喜欢
  • 2021-07-19
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多