У меня есть эластичный поиск в моей базе данных.
Я проиндексировал таблицу с именем Student
, Student
имеет ключ Foregin User
, мой пример кода выглядит следующим образом,
index.py
class Meta:
model = Student
related_models = [User]
fields = ['id', 'class','classteacher']
def get_instances_from_related(self, related_instance):
if isinstance(related_instance, User):
return Student.objects.get(user= related_instance.id)
models.py
class Student(CommonBase):
"""
Student details.
"""
user = models.ForeignKey(User, on_delete=models.CASCADE)
classteacher = models.ManyToManyField('Teacher', null=True, blank=True)
class = models.IntegerField( blank=True,
null=True)
class User(CommonBase, AbstractUser):
first_name = models.CharField(blank=True,max_length=255, verbose_name='first name')
dob = models.DateField(null=True, blank=True)
profile_pic_link = models.CharField(max_length=200, null=True, blank=True)
email = models.EmailField(max_length=254, unique=True, verbose_name='email address')
Когда я пытаюсь войти через администратора Django, я получаю,
self.model._meta.object_name
students.models.Student.DoesNotExist: Student matching query does not exist.
ERROR "POST /admin/login/?next=/admin/ HTTP/1.1" 500 203435
Это происходит из-за этих строк,
def get_instances_from_related(self, related_instance):
if isinstance(related_instance, User):
return Student.objects.get(user= related_instance.id)
т.е. он пытается получить «Пользователь» через «Студент» при входе через Django.
Я сделал временное исправление, поставив пробный улов,
def get_instances_from_related(self, related_instance):
if isinstance(related_instance, User):
try:
return Student.objects.get(user= related_instance.id)
except:
logger.error(str(e))
Есть ли лучшие решения ??