从我的问题Django sharing one model between two others开始,探讨了一般管理两个相似模型及其依赖关系的最佳方法。我现在来到下一部分 - 意见。
经过一些调整后,我来到以下通用列表视图来表示对象。
这是连贯的吗?网址应该管理这样的模型吗?
我相信如果我改进他们的逻辑,我可以将这个项目列表子类化,并在将来添加额外的逻辑,因此它应该是面向未来的。
的课程
urls.py excerpt
urlpatterns = [
url(r'^item/(?P<model>\w+)/$',views.ItemList.as_view(),name='generic'),
url(r'^item/(?P<model>\w+)/(?P<pk>\d+)$',views.ItemList.as_view(),name='generic'),
]
views.py摘录
class ItemList(ListView):
context_object_name = 'itemlist'
template_name = 'food/item.html'
model = None
def get_queryset(self):
model = apps.get_model('food',self.kwargs.get('model'))
if self.kwargs.get('pk'):
print ('pk provided')
return model.objects.filter(pk=self.kwargs.get('pk'))
else:
print ('all')
return model.objects.all()
food / item.html摘录(使用注册过滤器获取对象的类名)
{% block content %}
{% for item in itemlist %}
...
{% for review in item.reviews.all %}
{% endfor %}
...
<a href="/{{ item|to_class_name}}/{{ item.id }}/addreview" class="btn btn-default btn-block"><span class="glyphicon glyphicon-plus"> Add Review </span></a>
{% endblock %}
另外 - 我可以将这种态度带入我的表格中(再次假设当我添加评论时它会回归到它所来自的任何对象吗?)或者是我应该开始分解它的地方? / p>