这个功能在很多地方都要用到
这里举例的需求是在customer查看页面中,点击咨询课程中的某一个课程名称就会将这个课程与对应的同学解绑(不再显示)
要实现这个需求需要新添加一条url,这条url中我们可以获取想要解绑的课程id和表中这条记录的主键方法与filter、pop等功能相同,都是在表所对应的自己的配置类中设置,从而实现之后这种表才有这条独立的url
在stark.py中,我们给Customer这张表设置独立的配置类,extra_url会返回一个url,对应的视图函数为self.cancel_course:
class CustomerConfig(ModelStark):
#处理课程的显示样式和每个课程对应的url,url中带有要解绑的课程id和表中这条记录的主键id
def display_course(self, obj=None, is_header=False):
if is_header:
return "咨询课程"
temp = []
for course_obj in obj.course.all():
s = "<a href='/stark/crm/customer/cancel_course/%s/%s' style='border:1px solid #369;padding:3px 6px'><span>%s</span></a> " % (obj.pk, course_obj.pk, course_obj.name)
temp.append(s)
return mark_safe("".join(temp))
#视图函数,实现点击后删除功能
def cancel_course(self, request, customer_id, course_id):
obj = Customer.objects.filter(pk=customer_id).first()
obj.course.remove(course_id)
#返回当前表的查看页面
return redirect(self.get_list_url())
#新的url,点击相应课程就会走到这条url来,这是只单独为Customer添加一条url
def extra_url(self):
temp = []
temp.append(url(r"cancel_course/(\d+)/(\d+)", self.cancel_course))
return temp
site.register(Customer, CustomerConfig)
在sites.py中,我们设置一个通用的extra_url功能,但返回是空,所以其他表对应的url中没有cancel_course/(\d+)/(\d+):
class ModelStark(): #配置类
def extra_url(self):
return []
#我们在二级分发中将这条url添加到temp列表中
def get_urls2(self):
#额外添加一个url
temp.extend(self.extra_url())
return temp
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。