return render(request, "stark/change_list_views.html",{"add_url":self.get_add_url(),"show_add_btn":self.get_show_add_btn()})
# =================url相关,reverse反向解析=============
def get_change_url(self,nid):
name = "stark:%s_%s_change"%(self.model_class._meta.app_label,self.model_class._meta.model_name)
edit_url = reverse(name,args=(nid,)) #反向解析只要找到他的name属性,就会找到他对应的路径
return edit_url
def get_add_url(self):
name = "stark:%s_%s_add" % (self.model_class._meta.app_label, self.model_class._meta.model_name)
edit_url = reverse(name)
return edit_url
def get_delete_url(self, nid):
name = "stark:%s_%s_delete" % (self.model_class._meta.app_label, self.model_class._meta.model_name)
edit_url = reverse(name,args=(nid,))
return edit_url
def get_list_url(self):
name = "stark:%s_%s_changelist" % (self.model_class._meta.app_label, self.model_class._meta.model_name)
edit_url = reverse(name)
return edit_url
model_form_class=None
def get_model_form_class(self):
if self.model_form_class: #如果自己定制了就用自己的,在这就什么也不返回了,如果没有自己定义就返回默认的这个Form
return self.model_form_class
# 方式一定义ModelForm
# class TestModelForm(ModelForm):
# class Meta:
# model = self.model_class
# fields = "__all__"
# return TestModelForm
# 方式二定义
Meta = type("Meta", (object,), {"model": self.model_class, "fields": "__all__"})
TestModelForm = type("TestModelForm", (ModelForm,), {"Meta": Meta})
return TestModelForm
def add_views(self,request,*args,**kwargs):
model_form_class = self.get_model_form_class()
if request.method=="GET":
form = model_form_class()
return render(request,"stark/add_view.html",{"form":form})
else:
form = model_form_class(request.POST)
if form.is_valid():
form.save()
return redirect(self.get_list_url())
else:
return render(request, "stark/add_view.html", {"form": form})
def delete_view(self, request,nid, *args, **kwargs):
self.model_class.objects.filter(pk=nid).delete()
return redirect(self.get_list_url())
def change_views(self, request,nid, *args, **kwargs):
model_form_class = self.get_model_form_class()
obj = self.model_class.objects.filter(pk=nid).first()
if not obj:
return redirect(self.get_list_url())
if request.method == "GET":
form = model_form_class(instance=obj)
return render(request, "stark/edit_view.html", {"form": form})
else:
form = model_form_class(data=request.POST,instance=obj)
if form.is_valid():
form.save()
return redirect(self.get_list_url())
else:
return render(request, "stark/edit_view.html", {"form": form})
# =============路由系统,对应相应的视图函数=====================
def get_urls(self):
app_model_name = (self.model_class._meta.app_label,self.model_class._meta.model_name)
all_url = [
url(r'^$', self.change_list_views,name="%s_%s_chan