2014-02-09 176 views
0

我正在使用一個模塊,從中我需要擴展一個類。django覆蓋模塊類

#name.module.py 
""" Lots of code """ 
class TheClassIWantToExtend(object): 
    """Class implementation 

"""More code""" 

所以在我的Django的根,我現在有

#myCustomModule.py 
class MySubclass(TheClassIWantToExtend): 
    """Implementation""" 

我怎樣才能確保MySubclass代替模塊的原班?

編輯:也許我應該補充的是,原來的模塊已經安裝了PIP安裝模塊,它是在一個virtualenv中

+0

簡答:你不能。 –

+0

@ IgnacioVazquez-Abrams:爲什麼不呢?你可以使用它們作爲基礎來擴展核心django模塊和類。 – jrd1

+1

@ jrd1:除了你不能可靠地強制現有的代碼來使用你的類。 –

回答

0

你可以簡單地告訴Django使用你的類,而不是在需要的任何方法或類您希望擴展的父類的特定實例。

例子:

如果這是你的項目:

$ python django-admin.py startproject testdjango 

testdjango 
├── testdjango 
│ ├── __init__.py 
│ ├── settings.py 
│ ├── urls.py 
│ └── wsgi.py 
└── manage.py 

你創建你的應用程序(它本身自帶的機型):

$ python manage.py startapp utils 

testdjango 
├── testdjango 
│ ├── __init__.py 
│ ├── settings.py 
│ ├── urls.py 
│ └── wsgi.py 
└── manage.py 
│ 
└── utils 
    ├── __init__.py 
    ├── admin.py 
    ├── models.py 
    ├── views.py 
    └── urls.py 

比方說,我們要要擴展UcerCreationForm,要做到這一點,您需要在您的utils/models.py文件中執行以下操作:

from django.contrib.auth.forms import UserCreationForm 

# Since you wish to extend the `UserCreationForm` class, your class 
# has to inherit from it: 
class MyUserCreationForm(UserCreationForm): 
    # your implemenation specific code goes here 
    pass 

然後,要使用這個擴展類,你會使用它,你會正常使用父類:

# UserCreationForm is used in views, so let's say we're in the view 
# of an application `myapp`: 
from utils import MyUserCreationForm 
from django.shortcuts import render 

# And, here you'll use it as you had done with the other in some view: 
def myview(request, template_name="accounts/login.html"): 
    # Perform the view logic and set variables here 
    return render(request, template_name, locals()) 

雖然這是一個簡單的例子,有兩件事情要記住:始終在項目設置中註冊您的應用程序,並且在改進擴展時,您應該始終檢查您嘗試擴展的類的源代碼(如site-packages/django中所示),否則在事情發生時很快就會南下他們通常沒有工作。