2014-01-10 74 views
1

在我的新Django應用程序我使用第三部分Photologue應用程序。 這個應用程序運行良好,但我需要在其模型中添加一些字段,而無需更改Photologue應用程序的原始源代碼。Django添加字段到現有的模型應用程序

在這個片段中,一切運作良好,但也許這是不是最好的解決辦法:

Photo.add_to_class("link", models.URLField(max_leng....)) 

我讀過一些帖子,我應該用OneToOneRelationField ......但隨後,在Django管理應用程序,我將有兩個不同的頁面的照片和新的PhotoLink類...

有人可以幫助我嗎?

回答

4

如果您使用的是OneToOneField,則可以使用「擴展」模型作爲您正在擴展的模型的內聯。您可以通過首先取消註冊原有的管理類,然後用我們的變種覆蓋它做到這一點:

from otherapp.admin import OriginalFooAdmin 
from otherapp.models import Foo 
from yourapp.models import YourExtension 
from django.contrib import admin 

admin.site.unregister(Foo) 

class ExtensionInline(admin.StackedInline): 
    model = YourExtension 

class NewFooAdmin(OriginalFooAdmin): 
    inlines = OriginalFooAdmin.inlines + [ExtensionInline] 
admin.site.register(Foo, NewFooAdmin) 
+0

謝謝,這個方法在管理應用程序的工作效果很好,但在我的模板需要額外的工作。 你知道add_to_class方法嗎?它是最好的選擇? –

+0

使用'add_to_class'意味着您不能使用第三方應用程序的南遷移。另外,閱讀代碼的其他人需要額外的時間來確定字段的來源;它可能在您的代碼庫中的任何地方 – sk1p

相關問題