免責聲明:我是Django的新手,所以我仍在學習Django的做事方式。爲與已註冊模型的父級具有FK關係的模型創建TabularInline
我正在處理的項目有一個u User
模型和一個Student
模型。以前,UserAdmin
對兩款機型都承擔了雙重責任,但現在是創建獨立StudentAdmin
的時候了,它允許管理員輕鬆編輯/創建/ etc學生。
User
包含Student
(即第一個和最後一個姓名,電子郵件,電話等)和Student
含有較多的信息(即父電話,階級,待辦事項等)的基礎信息。 「班級」,「成績」等相關模型與FK的關係爲User
,起初這並不是我的問題。
但是,當我重新使用在新的StudentAdmin
中爲UserAdmin
創建的內聯類時,我遇到了此錯誤:<class 'my_project.admin.TodoInline'>: (admin.E202) 'my_project.Todo' has no ForeignKey to 'my_project.Student
。這並不奇怪,所以我想我可以僅僅覆蓋TodoInline上的_init_
方法來使用parent_model.user
,但後來我遇到了有關ForwardOneToOneDescriptor
和缺少_meta
字段的錯誤。考慮到這個用例,我相信必須有一個解決方案,但是我目前正在爲Django相關詞彙的進一步研究這個問題而蒙受損失。
class TodoInline(admin.TabularInline):
model = Todo
fields = ['content', 'completed', 'category', 'due_date']
verbose_name_plural = "To-do's"
extra = 0
# This doesn't work:
def __int__(self, parent_model, admin_site):
super(TodoInline, self).__init__(parent_model.user, admin_site)
如果這個問題的答案是重新定義模型之間的FK關係,那是我目前無法做到的。我需要一種解決方案,使我能夠重新定向內聯類(TodoInline
只是StudentAdmin
所需的許多內容之一),以便在Student
模型上使用相關的User
模型。先謝謝你!
也許我應該在我的解釋中更詳細。 '學生'確實對'用戶'擁有FK,因此一個學生與一個用戶相關聯;棘手的部分是所有與學生相關的模型(例如'Todo','Class','School'等等)都將FKs保存爲'User',而不是'Student'。這是模式的一個不幸設計,目前我還沒有做任何事情,所以理想的解決方案將允許我將這些模型作爲內聯添加到管理工具中的「StudentForm」。然而,從'User'繼承'Student'會很好,但是那艘船已經航行了。 – Epps
然後,您可以使用該'ForeignKey'反向(請參閱[django文檔](https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward))。 django提供了一個管理器來獲取反向'ForeignKey'關係的查詢集。通過這個,你可以通過'user'獲得'學生'。我不知道管理員內聯可能如何設計 - 我從來沒有做到這一點。但考慮到你現有的關係的相反,它應該是可能的。 –