即使用户存在,也没有用户匹配给定的查询。

问题描述 投票:0回答:1

我是Django的新手,我正在研究如何通过在url中使用用户的用户名来访问用户配置文件页面,例如:mysite.comrofilesomeusername。

我将在几个地方有链接到个人资料,但我正在试验的第一个地方是在我的导航栏中访问登录用户的页面。

base.html

<a class="dropdown-item" href="{% url 'fillups:user_profile' username=user.username %}" class="btn btn-simple">Overview</a>

这将正确地显示当前登录用户的名字,在本例中,我们将用户名为 第二用户

这是我正在使用的url模式。

path('profile/<str:username>/',views.UserProfile.as_view(),name='user_profile')

到目前为止,导航栏会显示用户名,seconduser, 当我点击按钮时,我被带到网址 profileseconduser,这就是我想要的。

问题是,我现在不能在我的视图中使用用户名来查询给定用户的对象。以下是我目前对这个视图的处理方法

的views.py中的内容。

class UserProfile(TemplateView):
    template_name = 'fillups/user_profile.html'
    slug_field = "username"
    slug_url_kwarg = "username"

    def get_context_data(self, **kwargs):
        context = super(UserProfile, self).get_context_data(**kwargs)
        usr = get_object_or_404(User, username=self.kwargs.get("username"))
        overview_stats = {
            'total_cars': Car.objects.filter(username=usr).count(),
            'total_fillups': Fillup.objects.filter(username=self.request.user).count(),
            'total_distance': Fillup.objects.filter(username=self.request.user).aggregate(Sum('trip_distance')),
            'total_gallons': Fillup.objects.filter(username=self.request.user).aggregate(total_gallons = Round(Sum('gallons'),4)),
            'avg_price': Fillup.objects.filter(username=self.request.user).aggregate(avg_price = Round(Avg('price_per_gallon'),3)),
            'total_spent': sum_total_sale(Fillup.objects.filter(username=self.request.user)),
            'avg_mpg': avg_mpg(Fillup.objects.filter(username=self.request.user))
        }
        context['stats'] = overview_stats
        context['active_cars'] = Car.objects.filter(status='Active').filter(username=self.request.user)
        context['last_10_fillups'] = Fillup.objects.filter(username=self.request.user).order_by('-date')[:10]
        return context

目前,在 overview_stats dict 中的所有内容都是我原来的,当我只是查询登录用户的东西时,那里只有一个简单的 "myprofile" url。我遇到她的问题是,get_object_or_404没有找到用户。我知道username=self.kwargs.get("username")得到的是'seconduser',就像它应该的那样,但由于某些原因,我就是找不到用户。

为了得到一些额外的信息,这里是我的一个模型。

class Car(models.Model):
    username = models.ForeignKey(User,on_delete=models.CASCADE)
    name = models.CharField(max_length=25)
    make = models.CharField(max_length=25)
    model = models.CharField(max_length=25)
    model_year = models.IntegerField(choices=MODEL_YEARS)
    status = models.CharField(max_length=10,choices=STATUS,default='Active')

    def __str__(self):
        return self.name

在我最初的Django教程中 讲师说最好扩展用户模型 这样更容易修改 所以我把它放在了一个单独的应用中 accountsmodels.py中。

class User(auth.models.User,auth.models.PermissionsMixin):

    def __str__(self):
        return "@{}".format(self.username)

我试过用 这个问题 这就是为什么我的视图中目前有slug字段的东西,虽然我的问题本质上是重复的。这个问题

我整晚都在纠结这个问题,如果能得到任何帮助,我将感激不尽,谢谢!我是一个相当新的Django用户,我正在努力使用户配置文件的页面可以通过在url中使用用户的用户名来访问,例如,mysite.comrofilesomeusername,我将有一个链接。

django django-views django-templates django-urls
1个回答
0
投票

移除 selfself.kwargs.get("username"). 应该是 kwargs.get("username").

kwargs 是一个非对象属性的参数。

© www.soinside.com 2019 - 2024. All rights reserved.