次のURLを使用して、基本的なCRUD、ネストされたリソースの実装を考え出そうとしています:
デフォルトの引数 (私の場合はコンテンツ タイプ ID) をビューに渡す方法がわかりません。以下は私が使用したものです。これを達成するための指針、またはこれが完全にがらくたである場合、これを達成するためのより良い方法はありますか?
urlpatterns = patterns('',
url (
regex = '^/?$',
view = ParentResourceListView.as_view(),
name = 'parent_resource_list'
),
url (
regex = r'^(?P<pk>\d+)/$',
view = ParentResourceDetailView.as_view(),
name = 'parent_resource_detail'
),
url (
regex = r'^new/$',
view = ParentResourceCreateView.as_view(),
name = 'parent_resource_create'
),
url (
regex = '^(?P<pk>\d+)/delete/$',
view = ParentResourceDeleteView.as_view(),
name = 'parent_resource_delete'
),
url (
regex = '^(?P<pk>\d+)/edit/$',
view = ParentResourceUpdateView.as_view(),
name = 'parent_resource_update'
),
)
urlpatterns += patterns('',
url (
regex = r'^(?P<object_id>\d+)/child_resources$',
view = ChildResourceListView.as_view(),
name = 'parent_resource_child_resource_list',
kwargs = {
"content_type",
ContentType.objects.get_for_model(ParentResource).id
}
),
url (
regex = r'^(?P<object_id>\d+)/child_resources/(?P<pk>\d+)/$',
view = ChildResourceDetailView.as_view(),
name = 'parent_resource_child_resource_detail',
kwargs = {
"content_type",
ContentType.objects.get_for_model(ParentResource).id
}
),
url (
regex = r'^(?P<object_id>\d+)/child_resources/new/$',
view = ChildResourceCreateView.as_view(),
name = 'parent_resource_child_resource_create',
kwargs={
"content_type",
ContentType.objects.get_for_model(ParentResource).id
}
),
url (
regex = '^(?P<object_id>\d+)/child_resource/(?P<pk>\d+)/delete/$',
view = ChildResourceDeleteView.as_view(),
name = 'parent_resource_child_resource_delete',
kwargs={
"content_type",
ContentType.objects.get_for_model(ParentResource).id
}
),
url (
regex = '^(?P<object_id>\d+)/child_resource/(?P<pk>\d+)/edit/$',
view = ChildResourceUpdateView.as_view(),
name = 'parent_resource_child_resource_update',
kwargs={
"content_type",
ContentType.objects.get_for_model(ParentResource).id
}
),
)
編集:
私が使用しているビューは、この投稿に触発されています
class ParentResourceMixin(object):
model = ParentResource
def get_success_url(self):
return reverse('parent_resource_list')
def get_queryset(self):
return ParentResource.objects.all()
class ParentResourceListView(ParentResourceMixin, ListView):
pass
class ParentResourceDetailView(ParentResourceMixin, DetailView):
pass
class ParentResourceCreateView(ParentResourceMixin, CreateView):
pass
class ParentResourceDeleteView(ParentResourceMixin, DeleteView):
pass
class ParentResourceUpdateView(ParentResourceMixin, UpdateView):
pass
編集(jpicの回答に基づく解決策):
子リソース ビューは次のとおりです。
class ChildResourceMixin(object):
content_type = None
model = ChildResource
def get_success_url(self):
return reverse('child_resource_list')
def get_queryset(self):
return ChildResource.objects.all()
class ChildResourceListView(ChildResourceMixin, ListView):
pass
class ChildResourceDetailView(ChildResourceMixin, DetailView):
pass
class ChildResourceCreateView(ChildResourceMixin, CreateView):
pass
class ChildResourceDeleteView(ChildResourceMixin, DeleteView):
pass
class ChildResourceUpdateView(ChildResourceMixin, UpdateView):
pass