是否可以手动指定要在内联中显示的相关对象集,其中不存在外键关系?
# Parent
class Diary(models.Model):
day = models.DateField()
activities = models.TextField()
# Child
class Sleep(models.Model):
start_time = models.DateTimeField()
end_time = models.DateTimeField()
class SleepInline(admin.TabularInline):
model=Sleep
def get_queryset(self, request):
# Return all Sleep objects where start_time and end_time are within Diary.day
return Sleep.objects.filter(XXX)
class DiaryAdmin(admin.ModelAdmin):
inlines = (SleepInline, )
我想要我的 start_time
Diary
模型管理员以显示 Sleep
的 Diary.day
,问题是 Sleep
模型没有 ForeignKey
到 Diary
(相反,关系的使用是隐含的)。
使用以上内容,Django 立即抱怨说
<class 'records.admin.SleepInline'>: (admin.E202) 'records.Sleep' has no ForeignKey to 'records.Diary'.
如何在 Diary
管理页面上将相关的 Sleep
实例显示为内联?
原文由 Flash 发布,翻译遵循 CC BY-SA 4.0 许可协议
让我首先向您展示您的逻辑的缺点:
正如您所注意到的,另一个缺点是您不能使用关系特性。 InlineAdmin 是一个相关的功能,所以正如您所说的“让管理员工作”一样,实际上您需要一把锤子来拧开螺栓。
但是…管理员使用 ModelForm。因此,如果您使用表单集构建 表单(出于同样的原因,它不能是内联表单集)并自己处理保存该表单集,那应该是可能的。 InlineFormset 和 InlineAdmin 的全部要点是使从相关模型生成表单集更容易,为此它需要知道关系。
最后,您可以 添加 url 并构建自定义页面,并且在扩展 admin/base.html 模板时,您将可以访问布局和 javascript 组件。