你可以簡單地告訴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
中所示),否則在事情發生時很快就會南下他們通常沒有工作。
簡答:你不能。 –
@ IgnacioVazquez-Abrams:爲什麼不呢?你可以使用它們作爲基礎來擴展核心django模塊和類。 – jrd1
@ jrd1:除了你不能可靠地強制現有的代碼來使用你的類。 –