Почему 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
Вернуться на верх