我的Django项目使用的其中一个软件包有一个简单的管理类,如下所示:
class EventUpdateInline(admin.StackedInline):
model = EventUpdate
class EventAdmin(admin.ModelAdmin):
form = EventForm
list_display = ('date_created', 'description', 'status', 'date_updated')
search_fields = ('description', 'message')
list_filter = ('services',)
inlines = [EventUpdateInline]
我已经编写了一个我想要使用的自定义EventUpdateInline
课程。如何将EventUpdateInline
替换为CustomEventUpdateInline
类?
这是第一个问题。问题的第二部分是我要向EventUpdate
模型添加自定义属性,以便我的CustomEventUpdateInline
类可以使用它。
我将我的代码放在哪里导入CustomEventUpdateInline
并替换旧版本,将自定义属性添加到EventUpdate
模型?
我不确定这是否可行。感谢
答案 0 :(得分:3)
编辑:
tl; dr:fork并使用pip / virtualenv代替 - 它是一种更清洁,可维护和理智的方法。猴子补丁通常是一个可怕的想法 - 见与SO答案相关联。但有时它是较小的邪恶。
如果你想要一个快速而又脏的猴子补丁 - https://stackoverflow.com/a/6720998/473285
但是现在通常情况下,如果项目是在github或bitbucket或我刚刚克隆它的任何东西,进行我的更改,然后使用pip -e
安装我的克隆版本(你正在使用virtualenv
,对吧?) 。如果您认为您的更改将被上游接受,这是最好的方法。
要考虑的另一件事是向前兼容性。将第三方软件包更新到更高版本后,您的猴子修补仍然有效吗?你的git变化会干净地合并吗?
通常我会在一些或所有这些罕见的情况下使用猴子补丁:
如果您正在做更多涉及的更改或更广泛有用的事情,那么经常分叉然后尝试上游被接受是最好的。即使你的改变是为了促进纯粹的内部东西,这些东西永远不会在你的项目之外的任何地方使用,virtualenv是迄今为止更好的方式。