Как вы перечислите все объекты с тем же объектом внешнего ключа? - PullRequest
0 голосов
/ 16 июня 2019

У меня есть модель Отдела с полем имени, затем Пользовательская модель с полем отдела с использованием Foreignkey для Отдела.Как я могу перечислить в шаблоне всех пользователей в отделе?Есть ли способ, не используя много ко многим?

class Department(models.Model):
    name = models.CharField(max_length=64,unique=True)
    description = models.TextField(blank=True)

def __str__(self):
    return self.name

class User(AbstractUser):
    department = models.ForeignKey(Department,
    on_delete=models.CASCADE,
    blank=True,null=True)

def __str__(self):
    return self.username

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Вам не нужно создавать новый набор запросов, если у вас есть ссылка на отдел, для которого вы хотите получить пользователей.

Использование этого models.py для тестирования ...

from django.db import models


class Department(models.Model):
    name = models.CharField(max_length=64, unique=True)
    description = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.name


class User(models.Model):
    username = models.TextField()
    department = models.ForeignKey(
        Department,
        on_delete=models.CASCADE,
        blank=True,
        null=True,
    )

    def __str__(self):
        return self.username

Этот запрос должен совпадать с запросом, который вам понадобится для получения пользователей для Department экземпляра с именем department:

department.user_set.all()

Пример из оболочки Django:

>>> from depts.models import Department, User
>>> 
>>> department = Department.objects.create(name='The North Pole')
>>> 
>>> for name in ('kungphu', 'K. Jones', 'S. Claus'):
...     User.objects.create(
...         username=name,
...         department=department,
...     )
... 
<User: kungphu>
<User: K. Jones>
<User: S. Claus>
>>> for user in department.user_set.all():
...     print(user)
... 
kungphu
K. Jones
S. Claus

Также вы можете использовать department.users вместо department.user_set, если добавите related_name='users' в поле User.department.

0 голосов
/ 16 июня 2019

User.objects.filter(department=<dept>) Это отфильтровывает детали по отделу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...