Почему django admin не читает метод __str__?
Я пытаюсь добавить метод str в мой файл models.py, чтобы моя административная страница показывала мне объекты, которые я зарегистрировал, с их собственным именем, а не как 'UserObject(1)'
Но когда я добавляю этот метод, вот что происходит:
AttributeError at /admin/crud_app/user/ Объект 'User' не имеет атрибута 'first_name'
models.py ->
from django.db import models
class User(models.Model):
"""
A normal class that represents an User object, the attributes are those bellow:
"""
first_name = models.CharField(name="First Name", max_length=30)
last_name = models.CharField(name="Last Name", max_length=30)
cpf = models.CharField(name="CPF", max_length=30)
age = models.IntegerField(name="Age")
email = models.EmailField(name="email", max_length=30)
def __str__(self):
return self.first_name
admin.py ->
from django.contrib import admin
from .models import User
admin.site.register(User)
Я пытаюсь добавить метод str и ожидаю получить имя, которое я даю своему зарегистрированному объекту, вместо 'Name object(1)'
Вы должны определить его в f-strings
, чтобы позаботиться о значениях None, так что если это None, то это не вызовет ошибку.
class User(models.Model):
"""
A normal class that represents an User object, the attributes are those bellow:
"""
first_name = models.CharField(name="First Name", max_length=30)
last_name = models.CharField(name="Last Name", max_length=30)
cpf = models.CharField(name="CPF", max_length=30)
age = models.IntegerField(name="Age")
email = models.EmailField(name="email", max_length=30)
def __str__(self):
return f"{self.first_name}"
Также жестко обновите сервер через ctrl+f5
и перезапустите его на другом порту, используя python manage.py runserver 5000
.
Убедитесь, что перед "def", после полей модели, нет лишних пробелов.
Используйте f-строки, если обычный self.first_name не работает. например f"{self.first_name}"
Кстати, он отлично работает на всех моих проектах. Какую версию django вы используете?
Необходимо исправить verbose_name вместо названия полей модели следующим образом.
class User(models.Model):
"""
A normal class that represents an User object, the attributes are those bellow:
"""
first_name = models.CharField(verbose_name="First Name", max_length=30)
last_name = models.CharField(verbose_name="Last Name", max_length=30)
cpf = models.CharField(verbose_name="CPF", max_length=30)
age = models.IntegerField(verbose_name="Age")
email = models.EmailField(verbose_name="email", max_length=30)
def __str__(self):
return self.first_name