我正在为admin构建一个django Web应用程序,主要涉及CRUD(创建,读取,更新和删除)操作。 我需要建议/最佳实践来设计表格。我是django和python的新手,需要专家的建议。 目前我在视图中创建了不同的方法,如
def create(request):
--logic to add
return HttpResponseRedirect('/createproduct')
def delete(request,obj_id):
result=products.objects.get(product_type=object_id).delete()
return HttpResponseRedirect('/listobjects/')
def getObjects(request):
products= products.objects.order_by('product_type')
return render(request,'getProducts.html',
{'results': products})
和我的urls.py如下所示
url(r'^createproduct/$',create),
url(r'^listobjects/',getObjects),
url(r'^deleteproduct/(?P<object_id>\d+)/$',delete)
答案 0 :(得分:3)
你的CRUD操作看起来非常简单,所以在这种情况下尝试使用Django的Class Based Generic Views。
正如文档所述,这是他们创建的目的之一:
Django的通用观点是根据某些常见的习语而制定的 在视图开发中找到的模式并将它们抽象出来以便您可以 快速编写数据的通用视图,而无需编写太多内容 代码。
我们可以识别某些常见任务,例如显示列表 对象,并编写显示任何对象列表的代码。那么 有问题的模型可以作为URLconf的额外参数传递。
Django附带通用视图以执行以下操作:
然后,您可以创建其forms并拥有精心设计的代码库。
答案 1 :(得分:1)
基于类的视图就是答案。使用基于类的视图:
from django.views.generic.edit import (CreateView, DeleteView, UpdateView)
class MyView(CreateView):
model = MyModel
足以为您提供工作视图。用UpdateView和DeleteView替换CreateView。这为您提供模型中的所有验证并自动保存数据。您可以使用列表视图列出数据。您可以覆盖视图中的方法以更改所需的任何内容。通过这种方式,您无法授予非管理员访问管理界面的权限。保留管理员的管理界面。你不应该在其中构建整个网站。
此外,不使用函数作为视图,而是使用TemplateView而不是django.views.generic
。它使您的代码更清洁。您可以将post与get分开,并将实例方法绑定到您的视图。
答案 2 :(得分:0)
如果你需要的只是django模型的crud接口,你也可以使用专为此目的而设计的django.contrib.admin
应用程序。只需授予用户管理权限,只需管理他们需要的对象。
请参阅{{3}}