この質問を見ている人にとっては、ここで私が1.3でやっていることです。それは、1.1で(もっと冗長ではないが)それをやっていたのとほとんど同じです。 (つまり、私の質問のリンクに記載されているように)
urls.py内の関連する行は、我々はこのようなものを持っていることが、上記ObjEditViewクラスの場合は
...
# pass a default value of page = 1 for optional parameter page
url(r'^obj/list$', ObjListView.as_view(), {'page': 1}, name='obj_list'),
url(r'^obj/list/page(?P<page>[0-9]+)$', ObjListView.as_view(), name='obj_list'),
...
# both new and edit use the same class, but edit obviously needs an id for the object.
# i should probably just be using pk but whatever.
url(r'^obj/new$', ObjEditView.as_view(), name='obj_edit'),
url(r'^obj/edit/(?P<obj_id>[0-9]+)/$', ObjEditView.as_view(), name='obj_edit'),
ように見えるかもしれません
上記のコメントでAlasdairへの私の質問への当然の結果として
class ObjEditView(UpdateView):
...
form_class = ObjForm
model=Obj
...
# this puts our obj in self.object
def get_object(self):
# if the obj exists, intialize our variables with values from the obj instance
# if it is a new obj, intialize accordingly
try:
obj = Obj.objects.get(id = self.kwargs['obj_id'])
except (KeyError, ObjectDoesNotExist):
obj = Obj()
return obj
、クラス内のさまざまな関数の実行順序は、一般にドキュメント内の順序に対応しています。つまりUpdateViewのget_object()はget_initial()の前に来ます。
ありがとう@Alasdair。自分のビューでデフォルトを設定するルートに行く場合、これを配置する適切な場所はどこですか?私は変数の初期化をどこで標準化したいのですか?例えば、 get_queryset、get_context_data、他の場所? –
私は個人的には、必要なメソッドの変数を初期化する必要があると思います。複数のメソッドで変数にアクセスする必要がある場合は、メソッドを作成して値を取得します(たとえば、日付ベースのビューでは 'get_year'を見てください)。すべての変数を1つの場所に初期化したい場合は、すべてのメソッドの変数にアクセスできるようにするために 'dispatch'をオーバーライドする必要があると思います。 – Alasdair
私はむしろ、変数。さまざまな機能の実行順序についてドキュメントのどこかにありますか?例えばディスパッチしてからget_queryset、get_context_dataなどを実行します。 それともコードを捜す必要がありますか? ありがとう! –