我有一个与User
或Organization
有通用关系的Django模型。该模型如下所示:
class Project(models.Model):
# ...
client_type = models.ForeignKey(
'contenttypes.ContentType',
on_delete=models.SET_NULL,
blank=True,
null=True,
limit_choices_to=(
models.Q(app_label='users', model='user') |
models.Q(app_label='organizations', model='organization')
)
)
client_id = models.PositiveIntegerField(blank=True, null=True)
client = GenericForeignKey('client_type', 'client_id')
# ...
我可以使用以下命令在项目管理员列表中显示该项目的客户端名称:
@admin.register(models.Project)
class ProjectAdmin(admin.ModelAdmin):
list_display = (
'__str__',
'client',
)
但是,我找不到在项目的实际更改页面中显示客户端名称的简单方法。我尝试了明显的方法:
fields = (
'name',
'client',
)
但是这会产生一个错误,提示client
不是有效的字段名称。我阅读了Django文档的Using generic relations as an inline部分,但他们的示例似乎...向后?
我只想显示谁是客户的名字,不必编辑。有什么建议吗?
答案 0 :(得分:1)
list_display
自动将所有字段视为只读。但是为了在更改页面上显示GenericForeignKey
字段,您需要将其显式设置为只读:
read_only_fields = ('client', )
您遇到的错误确实令人不安,它也使我绊了几次。