在Django Admin中使用内联的OneToOneField

 ccer 发布于 2023-02-06 21:51

我有DataFile模型,它们有LogOutput对象.一个数据文件对象将有一个LogOutput.对于属于DataFile的任何LogOutput,它只属于单个DataFile.其他模型也有LogOutput对象.

因为它们是一对一的,除了LogOutputs可以属于DataFiles以外的东西(例如,套件也有它们 - 参见下面的代码)我认为正确的做法是在DataFile中定义一个OneToOneField ,即该LogOutput.

models.py:

class LogOutput(models.Model):
    raw = models.TextField()

class DataFile(models.Model):
    name = models.CharField()#etc.
    logoutput = models.OneToOneField(LogOutput)

class Suite(models.Model):
    # Many Suites will have the same datafile:
    datafile = models.ForeignKey(DataFile)

    # Each Suite has a unique LogOutput different from the DataFile's
    # and as with the DataFile, that LogOutput will have just one Suite
    logoutput = models.OneToOneField(LogOutput)

现在,当我在Admin视图中查看DataFile时,我想看到LogOutput,所以我想我会内联它.

admin.py:

class LogOutputInline(admin.TabularInline):
    model = LogOutput

class DataFileAdmin(admin.ModelAdmin):
    search_fields = ['name']
    inlines = [LogOutputInline]

admin.site.register(DataFile, DataFileAdmin)

看来,由于OneToOneField定义的方向性,我无法进行内联.上面的admin.py给了我:

 has no ForeignKey to 

当然这是正确的,但我不知道它是如何相关的,因为DataFile只有一个(并且只有一个)LogOutput,而LogOutput只属于这一个DataFile.

我读了问题1744203,但解决方案是扭转关系的方向.我不认为我能做到这一点,因为其他对象(套件)也有LogOutputs.

而且,如果重要的话,这是在Django 1.5中.

我的问题是:为了在DataFile的管理页面上显示内联LogOutput,我需要做什么?(或者我是否想要使用需要修改的OneToOneField?)

TIA!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有