You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何查询指定saloon的预订记录 解决WSGIRequest无saloon属性报错

报错原因

Django原生请求对象WSGIRequest没有内置saloon属性,代码中直接调用self.request.saloon属于未定义属性调用,因此触发报错。

修复方案

你已经定义了SignUp关联表存储用户和门店的绑定关系,因此可以通过当前登录用户request.user查询对应的关联记录,获取saloon实例。同时原代码中使用get()查询预订记录仅能返回单条结果,无法满足多记录查询和统计需求,需改用filter()结合聚合查询实现统计功能。

修正后的完整代码
from django.db.models import Count
from django.shortcuts import redirect

class SaloonCheckBooking(TemplateView):
    template_name = 'saloonCheck.html'

    def get(self, request, *args, **kwargs):
        # 校验用户登录状态
        if not request.user.is_authenticated:
            return redirect('login')
        # 获取当前用户绑定的门店
        try:
            user_signup = SignUp.objects.select_related('saloon').get(user=request.user)
        except SignUp.DoesNotExist:
            return render(request, self.template_name, {'error': '当前账号未绑定任何门店'})
        current_saloon = user_signup.saloon
        # 1、获取门店所有预订记录,可在前端自行遍历展示
        all_bookings = Booking.objects.filter(saloon=current_saloon).order_by('date', 'time')
        # 2、直接统计不同服务对应各时段的预约人数,降低前端计算压力
        booking_stats = Booking.objects.filter(saloon=current_saloon).values('service', 'date', 'time').annotate(
            reserve_count=Count('id')
        ).order_by('service', 'date', 'time')
        return render(request, self.template_name, {
            'all_bookings': all_bookings,
            'booking_stats': booking_stats
        })
可选优化

如果业务要求一个用户只能绑定一个门店,可以给SignUp模型的user字段添加唯一约束,避免查询时返回多条记录报错:

class SignUp(models.Model):
   user = models.ForeignKey(User, on_delete=models.CASCADE, unique=True)
   saloon = models.ForeignKey(SaloonRegister, on_delete=models.CASCADE)
   contact_no = models.BigIntegerField()

内容的提问来源于stack exchange,提问作者smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 06:54:01