2011-09-26 60 views
1

试图创建一个基于关tutorial一个Django应用程序,但使用不同的模型。Django管理问题强制转换为Unicode

我在一部分我们改变管理面板添加3(使用Djanago第一次)具有相关外键的项目。

我知道从

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 

admin.py

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) 

回答

4

.__unicode__()方法预计会返回一个unicode对象。

然而,您的Event.__unicode__()返回self.location这是一个Location实例。要么将其转换为self.locationunicode,要么明确引用Location对象中的字段。

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

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

+1。并认为返回self.location.location是一个糟糕的形式 - 第一个例子与位置转换为Unicode字符串是可取的。 –