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

时间:2020-06-15 02:04:06

标签: django django-views django-templates django-urls

我是Django的新手,正在通过使用url中的用户名来使用户个人资料页面可访问,例如mysite.com/profile/someusername

我将在几个地方找到个人资料的链接,但我尝试进行的第一个地方是在导航栏中,以访问已登录用户的页面。

base.html

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

这将正确显示当前登录用户的名称,在本示例中,我们将使用用户名 seconduser

这是我为此使用的网址格式:

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

到目前为止,导航栏将显示用户名,seconduser,并且当我单击按钮时,将显示我想要的URL / profile / seconduser/。

问题是,我现在无法在视图中使用用户名来查询给定用户的对象。到目前为止,这就是我的看法

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教程中,讲师说最好扩展用户模型,以便更轻松地进行更改,因此我将其放在单独的应用程序account / models.py

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

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

我尝试使用this question中的方法,这就是为什么我目前在视图中使用子弹字段的原因,而我的问题本质上是this question的重复

我整夜都被困住了,非常感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

self中删除self.kwargs.get("username")。应该是kwargs.get("username")

kwargs是不属于对象属性的参数。

相关问题