2017-06-18 95 views
1

外键如下图所示,我要显示在另一个(事件)作为TabularInline的管理员更改视图一个模型(出席)。但是,出勤没有指向事件的直接ForeignKey。相反,它与注册有一对一的关系,而这又转向事件。任何简单的方法来实现这一点?Django管理TabularInline - 获得通过OneToOne关系

正如你可以从代码中看到,我试图用一种方法来访问事件,并把它传递到TabularInline类为FK_NAME,但它抛出一个错误说“‘myapp.Attendance’有没有名为'get_fk'的字段“

的myapp/models.py

from django.db import models 

class Event(models.Model): 
    ... 

class Registration(models.Model): 
    event = models.ForeignKey(Event, on_delete=models.CASCADE) 
    ... 

class Attendance(models.Model): 
    registration = models.OneToOneField(Registration, primary_key=True, one_delete=models.CASCADE) 
    ... 

    def get_fk(self): 
     return self.registration.event 

的myapp/admin.py

from django.contrib import admin 

class AttendanceInline(admin.TabularInline): 
    model = Attendance 
    fk_name = 'get_fk' 

class EventAdmin(admin.ModelAdmin): 
    inlines = [AttendanceInline] 

我目前的解决办法是另一个 '事件' ForeignKey的增加出席,但它似乎是多余的,因为相同的数据已经存储在'注册'内。

如果有人可以帮忙,请欣赏它!

回答