【发布时间】:2014-03-01 00:31:37
【问题描述】:
我正在尝试在 django Admin 中自定义和多对多内联,但我无法显示底层模型的字段。
这是一个简化的示例。也许你能告诉我如何引用它们?
这是我的模型:
class Clown(models.Model):
name = models.CharField(max_length=255)
def edit_link(self):
return ...
class Circus(models.Model):
clowns = models.ManyToManyField(Clown, blank=True, through='WorkedAt')
name = models.CharField(max_length=255)
class WorkedAt(models.Model):
clown = models.ForeignKey(Clown)
circus = models.ForeignKey(Circus)
和我的管理员:
class ClownInline(admin.TabularInline):
model = WorkedAt
fields = ['clown__name','clown__edit_link']
class CircusAdmin(admin.ModelAdmin):
inlines = [
ClownInline,
]
exclude = ('clowns',)
但是我得到了这个错误:
Unknown field(s) (clown__name) specified for WorkedAt
(我在 Django 1.6 上)
更新: 为什么这也行不通。 (通过模型添加了计算字段。)
class Clown(models.Model):
name = models.CharField(max_length=255)
def edit_link(self):
return ...
class Circus(models.Model):
clowns = models.ManyToManyField(Clown, blank=True, through='WorkedAt')
name = models.CharField(max_length=255)
class WorkedAt(models.Model):
clown = models.ForeignKey(Clown)
circus = models.ForeignKey(Circus)
@property
def edit_link(self):
return self.clown.edit_link()
和我的管理员:
class ClownInline(admin.TabularInline):
model = WorkedAt
fields = ['edit_link']
class CircusAdmin(admin.ModelAdmin):
inlines = [
ClownInline,
]
exclude = ('clowns',)
【问题讨论】:
-
fields必须是来自WorkedAt模型的数据库字段。它不能是底层模型的字段。在这种情况下,您可以在Circus模型上将内联为Clown,并完全取消WorkedAd -
好的,看看我的更新。如果我在直通模型中添加了一个方法,为什么它甚至不会出现?
-
你能发布一个堆栈跟踪吗?
-
同时定义
fields和readonly_fields应该可以完成这项工作。
标签: django django-forms django-admin django-1.6