【发布时间】:2014-01-02 18:56:04
【问题描述】:
我有 DataFile 模型,其中有 LogOutput 对象。 DataFile 对象将有一个 LogOutput。对于属于 DataFile 的任何 LogOutput,它将只属于单个 DataFile。其他模型也有 LogOutput 对象。
因为它们是一对一的,除了 LogOutputs 可以属于 DataFiles 以外的东西(例如,Suites 也有它们-- 请参见下面的代码)我认为正确的做法是在 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(s) 定义位置的方向性,我无法进行内联。上面的 admin.py 给了我:
<class 'trial.models.LogOutput'> has no ForeignKey to <class 'trial.models.DataFile'>
这当然是真的,但我看不出它是如何相关的,因为 DataFile 有一个(并且只有一个)LogOutput,而这反过来,只属于这一个DataFile。
我阅读了Question 1744203,但解决方案是扭转关系的方向。我认为我不能这样做,因为其他对象(Suites)也有 LogOutputs。
而且,如果重要的话,这是在 Django 1.5 中。
我的问题是:我需要做什么才能在 DataFile 的 管理页面上显示内联 LogOutput? (或者我是否考虑使用 OneToOneField 需要修改?)
TIA!
【问题讨论】:
-
你试过fk_name吗? fk_name = "日志输出"
-
我不熟悉它。我去看看。
-
这似乎是同样的问题。具体来说,方向性仍被假定为另一种方式:LogOutputInline.fk_name' 指的是模型'trial.LogOutput 中缺少的字段'
' -
似乎是正确的行为:code.djangoproject.com/ticket/18059
-
@Anto - 问题本身已经提到 Django Admin: OneToOne Relation as an Inline? 可能重复,以及为什么它不适用。
标签: python django django-admin