首页 > 解决方案 > 如何通过 Django 模型过滤项目

问题描述

我想获取我的应用程序上每个用户拥有的表的总数。usingTables.objects.all().count返回所有表格总数,但我想获取每个用户拥有的表格数量。

模型.py

class User(AbstractBaseUser, PermissionsMixin):
    name = models.CharField(max_length=30, blank=True, null=True)
class Bar(models.Model):
    user_id = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
class Tables(models.Model):
    table_no = models.CharField(max_length=14, unique=False)
    bar = models.ForeignKey(to=Bar, on_delete=models.CASCADE)

视图.py

def Dashboard(request, pk):
    user = User.objects.get(pk=pk)
    reservations = Tables.objects.filter(bar__user_id=user)
    pending = Reservation.objects.filter(status="pending")
    confirmed = Reservation.objects.filter(status="confirmed")

    context = {"reservations":reservations, "pending":pending, "confirmed":confirmed}

    return render(request, "dashboard/super/landlord/dashboard.html", context)

class Login(View):
    """ Login View."""
    form_class = LoginForm
    template_name = "dashboard/auth/login.html"

    def get(self, request):
        logout(request)
        form = self.form_class(None)
        return render(request, self.template_name, {'form': form})

    def post(self, request):
        form = self.form_class(request.POST)
        if form.is_valid():
            Email = form.cleaned_data.get('Email')
            password = form.cleaned_data.get('password')
            user = authenticate(username=Email, password=password)
            messages.success(request, "you have logged in successfully ")
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return redirect('/dashboard')
            else:
                error = "Email or password is incorrect"
        return render(
            request, self.template_name, {'form': form, 'error': error})

网址.py

from django.urls import path
from .views import *

urlpatterns = [
    path('dashboard/<int:pk>/', Dashboard, name="dashboard"),
]

模板.html

<li {% if request.path == '/dashboard/' %} class="active" {% endif %}><a href="{% url 'dashboard' user.pk %}"><i class="ion-home"></i> <span class="nav-label">Dashboard</span></a>
</li>

标签: djangodjango-modelsdjango-viewsdjango-formsdjango-templates

解决方案


双下划线允许filter()遵循 ForeignKey 关系

user = User.objects.get(email="nasir@yahoo.com")
tbl_count = Tables.objects.filter(bar__user_id=user).count()

推荐阅读