Использование метода __str__ в Django для превращения объекта в строку — не работает

#python #django #python-3.x #string #object

#python #django #python-3.x #строка #объект

Вопрос:

У меня есть следующий код в models.py , обратите внимание на функцию внизу, которая стремится изменить teacher_object в панели администратора на имя пользователя преподавателя.

 class Teachers(models.Model):
    email = models.CharField(max_length=50)
    school_pin = models.CharField(max_length=11)
    username = models.CharField(max_length=50)
    pass_field = models.CharField(db_column='pass', max_length=100)  # Field renamed because it was a Python reserved word.
    fname = models.CharField(max_length=50, blank=True, null=True)
    lname = models.CharField(max_length=50, blank=True, null=True)
    oauth_provider = models.CharField(max_length=50, blank=True, null=True)
    oauth_uid = models.CharField(max_length=100, blank=True, null=True)
    verified = models.IntegerField(blank=True, null=True)
    verificationcode = models.CharField(db_column='verificationCode', max_length=100, blank=True, null=True)  # Field name made lowercase.
    school_name = models.CharField(max_length=255, blank=True, null=True)
    designation = models.CharField(max_length=255, blank=True, null=True)
    date = models.DateField(blank=True, null=True)
    membershipid = models.IntegerField(blank=True, null=True)

    def __str__(self):
        return self.username

    class Meta:
        managed = False
        db_table = 'teachers'
  

Панель администратора по-прежнему показывает учителей, перечисленных как объект учителей (1275) (и так далее).

Я пробовал следующее: 1. Запуск команд makemigrations и migration 2. Вход в систему и выход из панели администратора 3. Обновление и закрытие CMD — перезапуск

Ничего из вышеперечисленного не сработало. При запуске сервера ошибок нет. Версия Python: 3.7 Последняя установка Django

Соображения: 1. Я использовал устаревшую базу данных mysql, поэтому reverse создал модели. Может ли это повлиять на что-либо? 2 Интересно, имеет ли мета-класс (внизу) какое-либо отношение к ошибке.

Я также попробовал следующее, но все равно безрезультатно:

 def __str__(self):
    return '%s %s' %(self.username,self.email)
  

Для справки, и в случае, если это актуально, вот мой admin.py

 from django.contrib import admin

# Register your models here.

from django.contrib import admin
from .models import Teachers
from .models import TeacherPins
admin.site.register(Teachers)
admin.site.register(TeacherPins)
  

Наконец, поскольку это модель, сгенерированная в обратном порядке (из устаревшего mysql), Django предоставил этот совет в начале models.py досье. Опять же, может ли это (не выполняемое, например, отсутствие первичного ключа и т. Д.) Повлиять на то, что метод str не работает?

 # This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey has `on_delete` set to the desired behavior.
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
  

Обновить:

  1. Я попытался изменить порядок (классов) — будет ли это иметь значение? Но все равно объект оставался объектом
  2. Я попытался добавить первичный ключ к обоим классам — это тоже не сработало

    student_id = модели.Целочисленное поле (пустое = True, null=True, primary_key=True)

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

1. вам нужен __repr__ метод, а не __str__

2. Кто-то предположил, что это не сработало. Можете ли вы объяснить, почему? str отлично работает в любом другом приложении.

3. Это в вопросе: Python 3.7

4. Я подозреваю, что это как-то связано с тем, что я предложил (отсутствие первичного ключа или, возможно, какое-то нулевое значение), но я не вижу, что изменить или как это сделать.

5. Может ли быть так, что значение blank=true null=true вызывает ошибку? student_id = модели. Целочисленное поле (пустое = True, null=True) … что это значит?