[英]Why django admin is not reading the __str__ method?
我试图在我的 models.py 文件中添加一个str方法到我的管理页面,向我展示我用自己的名字注册的对象,而不是像 'UserObject(1)'
但是当我添加这个方法时,发生了什么:
/admin/crud_app/user/ 'User' 处的 AttributeError object 没有属性 'first_name'
模型.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
管理员.py ->
from django.contrib import admin
from .models import User
admin.site.register(User)
我尝试添加str方法,我希望收到我给 object 注册的名称,而不是“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
在另一个端口重新启动服务器。
查看您的 GitHub 回购协议后,我发现问题在于将 model 命名为User
,它是 Django 中的内置 model 中的django.contrib.auth
所以请将其更改为CustomUser
并且问题出现在字段first_name
和last_name
中这些也在User
model 中,所以请尝试以下 model:
from django.db import models
class CustomUser(models.Model):
"""
A normal class that represents a User object, the attributes are those bellow:
"""
f_name = models.CharField(
verbose_name="First Name", max_length=30, default="Test")
l_name = models.CharField(
verbose_name="Last Name", max_length=30, default='Test')
cpf = models.CharField(verbose_name="CPF", max_length=15)
age = models.IntegerField(verbose_name="Age")
email = models.EmailField(verbose_name="email", max_length=30)
def __str__(self):
return f"{self.f_name}"
然后运行两个迁移命令(makemigrations 和 migrate)。
管理员.py
from django.contrib import admin
from .models import CustomUser
@admin.register(CustomUser)
class CustomUserAdmin(admin.ModelAdmin):
list_display = ['id', 'f_name', 'l_name', 'cpf', 'age', 'email']
网址.py
from django.urls import path
from crud_app.views import update_user, check_user, delete_user, register_user, menu
urlpatterns = [
path('', menu),
path("check_user/", check_user, name="check_user.html"),
path("register_user/", register_user, name="register_user.html"),
path("update_user/", update_user, name="update_user.html"),
path("delete_user/", delete_user, name="delete_user.html")
]
然后您可以自己更改模板中的字段名称。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.