【问题标题】:Python/Django AttributeError "Object 'players' has no attribute 'fields'Python/Django AttributeError“对象‘玩家’没有属性‘字段’
【发布时间】:2010-09-01 16:30:37
【问题描述】:

我正在设置管理页面,以便我可以使用它来添加数据,在这种情况下是玩家。当您尝试在 admin.py 中注册 Players 类时,您会收到问题标题中描述的错误(对象“players”没有属性“fields”)。查看我在下面粘贴了一个 sn-p 的 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)

【问题讨论】:

  • 提供您的管理员注册码。那里似乎有问题。
  • 而“unicode”应该是方法,而不是全局函数。只需正确缩进即可。
  • @Vadim 它是缩进的,我只是没有在我的粘贴中把它翻过来。看来我通过将玩家移动到 admin.py 中的注册行来解决这个问题。

标签: python django django-admin


【解决方案1】:

修复在 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)

【讨论】:

  • admin.site.register((Teams, Players)) 应该也可以。
【解决方案2】:

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

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 模型)关联的模型管理对象)。模型管理对象必须具有属性“字段”,该属性提供有关在使用管理界面时如何显示单个模型的属性字段的信息。由于 Players 不是模型管理对象,并且没有名为“fields”的属性,因此 Djagno 会引发异常。 Click here for more information.

如您所料,快速解决这种情况的方法是将它们分成不同的寄存器调用:

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

【讨论】:

    【解决方案3】:

    我收到了同样的错误消息,在我的情况下,我忘记从 models.Admin 继承我的 Admin 类

    之前:

    from django.contrib import admin
    
    class TeamAdmin:
        fields = ['name', 'age']
    

    之后:

    from django.contrib import admin
    
    class TeamAdmin(admin.ModelAdmin):
        fields = ['name', 'age']
    

    【讨论】:

      【解决方案4】:

      您是否设置了 ModelAdmin?

      类 PlayersAdmin(admin.ModelAdmin):

      【讨论】:

        猜你喜欢
        • 2016-03-10
        • 2021-06-08
        • 1970-01-01
        • 1970-01-01
        • 2020-11-01
        • 2014-01-22
        • 2015-11-29
        • 2021-05-28
        • 2016-09-11
        相关资源
        最近更新 更多