2014-01-10 2 views
1

в моем новом приложении Django. Я использую приложение Photologue из 3-й части. Это приложение работает хорошо, но мне нужно добавить какое-то поле в его модель без изменения исходного исходного кода приложения Photologue.Django добавьте поле в существующее приложение модели

С помощью этого фрагмента кода, все работает хорошо, но, возможно, это не самое лучшее решение:

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

Я прочитал несколько постов, где я должен использовать OneToOneRelationField ... но потом, в Джанго администратора приложения, У меня будет две страницы формы фотографии и новый класс 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

Смежные вопросы