Home > Mobile >  How to query User model by 'custom' fields? (django.db.models.fields.related_descriptors.R
How to query User model by 'custom' fields? (django.db.models.fields.related_descriptors.R

Time:05-18

I extended the User model using my account app.

Model Account app:

from django.db import models
from django.contrib.auth.models import User
from departments.models import Department

class Account(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_pic = models.ImageField(upload_to='profile_pics', blank=True)
    department = models.ForeignKey(
        Department, on_delete=models.SET_NULL, null=True, related_name='department')

    def __str__(self):
        return self.user.username

Now I need to send the count of users from the same department to my template...

View:

from django.contrib.auth.models import User

@login_required
def home(request):
    context = {
        'title': 'Dashboard',
        'department_members':  'department_members': User.objects.filter(department=request.user.account.department).count(),
    }
    return render(request, 'app/dashboard.html', context)\

department_members is always 1 even though I have more users on the same department.

I figure that the problem is that User don't have department field by default, so I can't say User.account.objects.filter(department=request.user.account.department)

I've tried a lot of queries and looked into django docs but I could't find the proper manner on how to retrieve this info.

Anyone have the same problem? Any tips on how I can debug/create my query in a better way?

Thanks to all in advance!

CodePudding user response:

Maybe changing department_members queryset to:

context = {
        'title': 'Dashboard',
        'department_members': Account.objects.filter(department=request.user.account.department).count() if hasattr(request.user, "account") else 0,
    }

Solves your problem.

  • Related