Есть ли способ сделать фильтрацию внутри моделей в Django? - PullRequest
0 голосов
/ 17 марта 2020

Я создаю собственную модель учетной записи и добавляю столбцы вида, такие как is_student, is_teacher . Поэтому я создаю другой класс в другом приложении, чтобы я мог фильтровать что-то подобное в моделях.

Учетные записи приложения models.py

class Account(AbstractBaseUser):
    email                   = models.EmailField(verbose_name="email", max_length=60, unique=True)
    username                = models.CharField(max_length=30, unique=True)
    date_joined             = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
    last_login              = models.DateTimeField(verbose_name='last login', auto_now=True)
    is_admin                = models.BooleanField(default=False)
    is_active               = models.BooleanField(default=True)
    is_staff                = models.BooleanField(default=False)
    is_superuser            = models.BooleanField(default=False)
    is_student              = models.BooleanField(default=False)
    is_teacher              = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    objects = MyAccountManager()

Основное приложение models.py

from accounts.models import Account
a = Account.objects.filter(is_student=True)
class Students(models.Model):
    student = models.ManyToManyField(a, on_delete=models.CASCADE)

То, что я хочу, это чтобы связь между таблицей учеников и аккаунтами

(только те, is_student = True)

1 Ответ

0 голосов
/ 17 марта 2020

Не думаю, что это даже возможно. Таблицы существуют до данных. Итак, вы создаете таблицы, а затем вставляете данные. Вы можете решить, после каких данных вставлять.
И не называйте свою таблицу во множественном числе: Students

Вот решение:

class Student(models.Model):
    # this means a student can have many accounts and an account can be linked with many students 
    account = models.ManyToManyField(Account, related_name="students", on_delete=models.CASCADE)

Это может быть нехорошо для иметь учетную запись, связанную со многими студентами.
Я бы сделал:

class Student(models.Model):
    # this means a student can only have one  account and an account can only be linked with one student
    account = models.OneToOneField(Account, related_name="student", on_delete=models.CASCADE)

Если вы хотите получить активных пользователей, просто сделайте, по вашему мнению:

active_students = Student.objects.filter(account__is_active=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...