Django自定义的增删改查

1.路由系统 namespace,用于区分相同name的url,通过namespace为url添加一个前缀 反向生成URL的时候 reverse('namespace:name') {% url "namespace:name"%} @property def urls(self): return (self.get_urls(), None, 'stark') 复制代码 # 总的url def get_urls(self): model_class_app = (self.model_class._meta.app_label, self.model_class._meta.model_name) urlpatterns = [ url(r'^$', self.wrap(self.changlist_view), name='%s_%s_changelist' % model_class_app), url(r'^add/$', self.wrap(self.add_view), name='%s_%s_add' % model_class_app), url(r'^(\d+)/change/$', self.wrap(self.chang_view), name='%s_%s_change' % model_class_app), url(r'^(\d+)/delete/$', self.wrap(self.delete_view), name='%s_%s_delete' % model_class_app) ] urlpatterns.extend(self.extra_url()) return urlpatterns # 额外的url 在自己的config中定义该函数添加 def extra_url(self): return [] @property def urls(self): return self.get_urls() # 列表页面的url def get_list_url(self): name = 'stark:%s_%s_changelist' % (self.model_class._meta.app_label, self.model_class._meta.model_name) list_url = reverse(name) return list_url # 添加按钮的url def get_add_url(self): name = 'stark:%s_%s_add' % (self.model_class._meta.app_label, self.model_class._meta.model_name) add_url = reverse(name) return add_url # 编辑的url 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,)) return edit_url # 删除的url def get_delete_url(self, nid): name = 'stark:%s_%s_delete' % (self.model_class._meta.app_label, self.model_class._meta.model_name) del_url = reverse(name, args=(nid,)) return del_url 复制代码 2. 制作项目启动时,自动加载文件 在当前app下的apps中写入下面代码即可,并去已注册的所有app中,找stark.py文件,并加载 def ready(self): from django.utils.module_loading import autodiscover_modules autodiscover_modules('stark') 3.model操作 复制代码 model.UserInfo model.UserInfo._meta.app_label#获取当前app的名称 model.UserInfo._meta.model_name#获取当前类名小写 model.UserInfo._meta.get_field('username')#获取字段 model.UserInfo._meta.get_field('username').verbose_name#获取verbose_name model.UserInfo._meta.get_field('外键或多对多字段').rel.to #得到关联的model类 - models.UserInfo._meta.get_field('name') # 根据字段名称,获取字段对象 - models.UserInfo._meta.fields # 获取类中所有的字段 - models.UserInfo._meta._get_fields() # 获取类中所有的字段(包含反向关联的字段) - models.UserInfo._meta.many_to_many # 获取m2m字段 复制代码 4.函数和方法 函数还是方法 对于类中的函数,直接用类名调用的话需要传入self参数,既函数 用对象调用的话就不需要传入self参数,既方法 复制代码 class Foo(object): def __init__(self): self.name = 'alex' def func(self): print(self.name) from types import FunctionType,MethodType obj = Foo() print(isinstance(obj.func,FunctionType)) # False print(isinstance(obj.func,MethodType)) # True print(isinstance(Foo.func,FunctionType)) # True print(isinstance(Foo.func,MethodType)) # False """ 注意: 方法,无需传入self参数 函数,必须手动传入self参数 """ 复制代码 函数是一个对象, - func.__name__ #获取函数的名字 - func.text = "sdfsfd" #设置属性值 复制代码 # obj = Foo() # print(obj.func) #

猜你喜欢

转载自www.cnblogs.com/linyidian/p/9587881.html