Python/Django 属性错误 “对象 'players' 没有属性 'fields'”

9 投票
4 回答
12046 浏览
提问于 2025-04-16 03:35

我正在设置管理页面,目的是为了能用它来添加数据,这里是指添加玩家。当你尝试在admin.py中注册Players类时,会遇到标题中提到的错误(对象'players'没有'fields'属性)。我查看了下面粘贴的views.py代码片段,但不太明白它可能指的是什么。

抱歉如果这个问题很基础,我对django和python都还很陌生。

class Players(models.Model):
    player_id        = models.IntegerField(primary_key=True)
    firstname        = models.CharField(max_length=50)
    lastname         = models.CharField(max_length=50)
    team             = models.ForeignKey(Teams)
    Top200rank       = models.IntegerField(null=True, blank=True)
    position         = models.CharField(max_length=25)
    roster_status    = models.ForeignKey(RosterStatus, null=True, blank=True)
    class Meta:
        ordering = ('lastname', 'firstname')
        verbose_name_plural = 'Players'

    def __unicode__(self):
        return u"%s %s" % (self.firstname, self.last_name)

4 个回答

1

我也遇到了同样的错误信息。在我的情况下,我忘记让我的 Admin 类继承 models.Admin 了。

之前:

from django.contrib import admin

class TeamAdmin:
    fields = ['name', 'age']

之后:

from django.contrib import admin

class TeamAdmin(admin.ModelAdmin):
    fields = ['name', 'age']
5

你遇到的具体错误很重要:

Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/
Exception Type: AttributeError
Exception Value:    
type object 'Player' has no attribute 'fields'

这个错误确实是来自于这一行,

admin.site.register(Teams, Players)

但更具体来说,是因为你把两个模型配对在一起,这意味着第二个对象(这里是 Players)是与第一个对象(这里是 Teams,始终是 Django 模型)相关联的模型管理对象。模型管理对象必须有一个叫做 'fields' 的属性,这个属性提供了关于如何在管理界面中显示单个模型属性字段的信息。由于 Players 不是一个模型管理对象,并且没有名为 'fields' 的属性,所以 Django 抛出了一个异常。点击这里了解更多信息

解决这个问题的一个快速方法,正如你所猜测的,是将它们分开,分别进行注册:

admin.site.register(Teams)
admin.site.register(Players)
11

修复的地方在admin.py文件里,下面有具体内容。

之前的代码:

#foozball admin python file

from foozball.leaguemanager.models import Division, Games, RosterStatus, Teams, Players
from django.contrib import admin

admin.site.register(Teams, Players)

现在的代码:

foozball管理后台的Python文件

from foozball.leaguemanager.models import Division, Games, RosterStatus, Teams, Players
from django.contrib import admin

admin.site.register(Teams)
admin.site.register(Players)

撰写回答