1. Admin 自动注册全部 Model 字段
admin.py
1
2
3
4
5
6
7
8
9
10
|
# -*- coding: utf-8 -*-
import inspect
from django.contrib import admin
from . import models
for name, obj in inspect.getmembers(models):
try:
if inspect.isclass(obj):
admin.site.register(getattr(models, name))
except Exception as e:
pass
|
2. 获取全部 View Name
获取 Project 全部 View Name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
from django.conf import settings
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern
root_urlconf = __import__(settings.ROOT_URLCONF)
all_urlpatterns = root_urlconf.urlpatterns
VIEW_NAMES = [] # maintain a global list
def get_all_view_names(urlpatterns):
global VIEW_NAMES
for pattern in urlpatterns:
if isinstance(pattern, RegexURLResolver):
get_all_view_names(pattern.url_patterns) # call this function recursively
elif isinstance(pattern, RegexURLPattern):
view_name = pattern.callback.func_name # get the view name
VIEW_NAMES.append(view_name) # add the view to the global list
return VIEW_NAMES
get_all_view_names(all_urlpatterns)
|
获取 App 全部 View Name
1
2
3
|
from my_app.urls import urlpatterns as my_app_urlpatterns
my_app_views = get_all_view_names(my_app_urlpatterns)
|
3. Admin 中 ManyToMany Field 支持搜索
models.py
1
2
|
class SomeModel(models.Model):
users = models.ManyToMany(User)
|
admin.py
1
2
|
class SomeModelAdmin(admin.ModelAdmin):
filter_horizontal = ('users',)
|
4. Model 中 Choices 使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# -*- coding: utf-8 -*-
from enum import Enum
class ChoiceEnum(Enum):
@classmethod
def choices(cls):
return tuple((x.name, x.value) for x in cls)
@classmethod
def choices_name(cls):
return tuple(x.name for x in cls)
@classmethod
def choices_value(cls):
return tuple(x.value for x in cls)
@classmethod
def get_name(cls, value):
if value in cls.choices_value():
return cls.choices_name()[cls.choices_value().index(value)]
else:
return ''
@classmethod
def get_value(cls, name):
if name in cls.choices_name():
return cls.choices_value()[cls.choices_name().index(name)]
else:
return ''
class Colors(ChoiceEnum):
RED = 'red'
WHITE = 'white'
BLUE = 'blue'
|
models.py
1
2
|
class Desk(models.Model):
color = models.CharField(max_length=32, choices=Colors.choices(), default=Colors.RED.name)
|
console 中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
print Colors.choices()
(('BLUE', 'blue'), ('RED', 'red'), ('WHITE', 'white'))
print Colors.RED.value
red
print Colors.get_name(Colors.RED.value)
RED
print Colors.choices_value()
('blue', 'red', 'white')
print Colors.choices_name()
('BLUE', 'RED', 'WHITE')
|
5. 字符串与时间相互转换
1
2
3
|
from datetime import datetime
print datetime.strptime('2017-09-02 17:41:20', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2017, 9, 2, 17, 41, 20)
|
1
2
3
|
from datetime import datetime
print datetime.now().strftime('%Y-%m-%d %H:%M:%S')
'2017-09-30 09:50:57'
|
6. 组装装饰器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def compose_decorators(*funs):
"""
按照顺序组装装饰器
@A
@B
@C
等价于
@compose_decorators(A, B,C)
"""
def deco(f):
for fun in reversed(funs):
f = fun(f)
return f
return deco
|
版权声明:
作者:三掌柜
链接:https://www.mryunwei.com/53500.html
文章版权归作者所有,未经允许请勿转载。