尝试基于tutorial但使用其他模型创建Django应用。(首次使用Djanago)

我正在修改“管理”面板以添加3个具有相关外键的项目。

我知道问题出在

class EventAdmin(admin.ModelAdmin):


在admin.py的第10行上,但是我不确定如何安排这些字段才能使其正常工作。

管理面板将一直起作用,直到我尝试创建具有3个选择的事件为止。然后我得到以下错误...强制转换为Unicode:需要字符串或缓冲区,找到位置

代码如下...

models.py

from django.db import models

class Location(models.Model):
    icon = models.CharField(max_length=200)
    location = models.CharField(max_length=200)

    def __unicode__(self):
        return self.location

class Event(models.Model):
    location = models.ForeignKey(Location)
    info = models.CharField(max_length=200)

    def __unicode__(self):
        return self.location

class Choice(models.Model):
    event = models.ForeignKey(Event)
    choice = models.CharField(max_length=200)
    link = models.CharField(max_length=200)

    def __unicode__(self):
        return self.choice


管理员

from map.models import Location
from map.models import Event
from map.models import Choice
from django.contrib import admin

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 4

class EventAdmin(admin.ModelAdmin):
    fieldsets = [
             (None,               {'fields': ['location', 'info']}),
             ]
    inlines = [ChoiceInline]

admin.site.register(Event, EventAdmin)
admin.site.register(Location)

最佳答案

.__unicode__()方法应返回一个unicode对象。

但是,您的Event.__unicode__()返回一个self.location实例Location。它可以将self.location强制转换为unicode,也可以明确引用Location对象中的字段。

def __unicode__(self):
    return u'%s' % (self.location, )

def __unicode__(self):
    return self.location.location

10-07 16:23
查看更多