#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)