Я думаю, что нет необходимости создавать абстрактного пользователя. просто определите две модели для ученика и учителя и задайте ключ темы one_to_one для пользовательской модели по умолчанию, также нет необходимости в поле ученик / учитель !. просто для обеспечения лучшего обратного вызова от модели User к этим двум моделям, задайте related_name в поле внешнего ключа, или будет задано обратное значение по умолчанию "teacher_set".
for teacher in Teacher.objects.all():
print(teacher.user.username)
или наоборот:
for user in User.objects.all():
if user.teacher:
print(user.teacher.username)