Django admin添加对象字段错误

时间:2016-05-01 16:49:40

标签: django python-2.7 django-admin

Django版本:1.8.4 Python版本:2.7.10 我的django模型如下: 样/ models.py

from django.db import models

class Kind(models.Model):
    id = models.IntegerField(null=False, primary_key=True)
    name = models.CharField(max_length=64, null=False, default="default kind name")
    create_time = models.DateField(auto_now=True, auto_created=True)

游戏/ models.py

from django.db import models
from kind import models as kind_models

class Game(models.Model):
    id = models.IntegerField(primary_key=True)
    kind = models.ForeignKey(kind_models.Kind)
    name = models.CharField(max_length=64, null=False, default="default game")
    description = models.TextField(null=False, default="default description")
    create_date = models.DateField(auto_created=True, auto_now=True)
    sale_date = models.DateField()

游戏/ amdin.py

from django.contrib import admin
from game import models as game_models

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('id', 'get_kind', 'name', 'description', 'create_date', 'sale_date')
    search_fields = ('id', 'get_kind', 'name', 'description', 'create_date', 'sale_date')
    list_filter = ('kind__name', 'name', 'create_date', 'sale_date')
    ordering = ('id',)
    fields = ('id', 'get_kind', 'name', 'description', 'sale_date')

    def get_kind(self, obj):
        return obj.kind.name

    get_kind.short_description = 'kind'
    get_kind.empty_value_display = 'not value set'

admin.site.register(game_models.Game, AuthorAdmin)

我成功运行我的应用程序并查看管理员没有任何错误或警告。但是,当我点击add game时,网页会显示一些错误:

FieldError at /admin/game/game/add/
Unknown field(s) (get_kind) specified for Game. Check fields/fieldsets/exclude attributes of class AuthorAdmin.
Request Method: GET
Request URL:    http://0.0.0.0:8000/admin/game/game/add/
Django Version: 1.8.4
Exception Type: FieldError
Exception Value:    
Unknown field(s) (get_kind) specified for Game. Check fields/fieldsets/exclude attributes of class AuthorAdmin.

事实上,我不擅长django,我只是一个django初学者。

2 个答案:

答案 0 :(得分:0)

当模型对象本身只是“善意”时,您在Django管理员中将模型对象引用为“get_kind”。所以就像管理员中的“fields =”一样,它应该是fields =('id','kind','name'.... etc

答案 1 :(得分:0)

您已将get_kind设置为search_fieldsfields,但这不是您模型上的实际字段。你不能这样做(特别是在字段中,因为你不能指定一些功能)。您应该在kind__name中指定search_fields而在kind指定fields

如果您真的想要显示列中的值,可以将其作为模型中的属性并将其放在read_only中。