Django Admin 强制转换为 Unicode 的问题

1 投票
1 回答
1223 浏览
提问于 2025-04-17 03:07

我正在尝试创建一个基于教程的Django应用,但使用了不同的模型。(这是我第一次使用Django)

现在我到了修改管理面板的部分,想要添加三个有依赖关系的选项。

我知道问题出在

class EventAdmin(admin.ModelAdmin):

admin.py文件的第10行,但我不太确定字段应该怎么排列才能让它正常工作。

管理面板在我尝试创建一个有三个选择的事件之前都能正常工作。然后我就遇到了以下错误... 转换为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)

1 个回答

4

.__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

撰写回答