Запрос связанных атрибутов модели в django

#python #django #modelattribute

#python #django #modelattribute

Вопрос:

У меня есть следующая пользовательская схема модели пользователя.

 ```
class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)

class StudentProfile(models.Model):
    student = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    location = models.CharField(max_length=8, blank=False, default='')
class TeacherProfile(models.Model):
    teacher = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    location = models.CharField(max_length=8, blank=False, default='')
    gender = models.CharField(max_length=8, choices=GENDER_CHOICES, default='')

```
  

Я могу запрашивать учащихся на основе местоположения их учителя (текущего пользователя).

 Student.objects.filter(location=request.user.teacher.location)
  

Я также могу запросить пользовательскую модель и найти всех учителей / учеников

     User.objects.filter(is_teacher=True)
  

ВОПРОС:
Не полагаясь на модели профилей (ученик и учитель) Как я могу расширить запрос на abstractuser, используя атрибуты профиля.

[X] — Это неправильно, но идея примерно такая;

     User.objects.filter(is_teacher=True).filter(is_teacher.location=newyork)
  

Комментарии:

1. Похоже, TeacherProfile у вас нет location поля?

2. извинения. поле location аналогично тому, что в studentprofile

Ответ №1:

Вы можете следовать OneToOneField в обратном порядке:

 User.objects.filter(teacherprofile__location='newyork')  

Таким образом, вам не нужно хранить is_teacher и is_student явно. Вы можете просто фильтровать Student s с помощью:

 # Users with a related StudentProfile record
User.objects.filter(studentprofile__isnull=False)