2017-06-18 27 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的增加出席,但它似乎是多餘的,因爲相同的數據已經存儲在'註冊'內。

如果有人可以幫忙,請欣賞它!

回答