我不太清楚你的这个怎么用的,这么久了,我也没见过这么好用的东西,回去研究研究
目前最笨的方法,还是用全局变量,目前不知道你的视图是写在哪里的,但是还是可以使用函数或者全局变量,下面给出三个例子,能用的话加个好友后面多交流一下,我才发现django还有这么好用的东西
方案一 你的所有上诉class 在views.py,假设你的django访问函数 viewtst,访问方式 post
#这里是一个数据库模型字典,你把你的往里面存就好了
database={}
#这是定义前端访问的全局数据库模型变量
selectmodels=None
#前端访问对应路由函数
class viewtst(View):
# 装饰器decompose_parameter作用是将post的所有json参数转换成键值对add到kwargs
@method_decorator(decompose_parameter)
def post(self, request, *args, **kwargs):
# 导入全局数据库模型变量
global database
# 设置全局前端访问的数据库模型变量
global selectmodels
# 获取前端访问的数据库模型名称
dataname=kwargs.get('database')
# 设置全局变量为前端访问的数据库对象
selectmodels=database.get(dataname)
# 后续操作...
return JsonResponse({})
class CategorySerializer(serializers.ModelSerializer):
#第二个问题: 这里也要写判断, 怎么拿到视图中获取的参数呢? 要改下面的model,把model改成变量,否则得写100遍
class Meta:
# Meta 调用全局变量 selectmodels
if selectmodels:
model=selectmodels
else:
#你可以在这里做一个错误处理
pass
fields='__all__'
class CategoryFilter(filters.FilterSet):
id = filters.CharFilter(lookup_expr='exact')
id_orderticket = filters.CharFilter(lookup_expr='exact')
order_date_gte = filters.DateFilter(field_name='order_date', lookup_expr='gte')
order_date_lte = filters.DateFilter(field_name='order_date', lookup_expr='lte')
project_name = filters.CharFilter(lookup_expr='icontains')
#第三个问题: 这里还要是要写判断, 来改下面的model,把model改成变量,否则也得写100遍
class Meta:
# Meta 调用全局变量
# Meta 调用全局变量 selectmodels
if selectmodels:
model = selectmodels
else:
# 你可以在这里做一个错误处理
pass
fields = ['id','id_orderticket','sample_name','order_date_gte','order_date_lte','project_name','is_active']
class CategoryView(ModelViewSet):
queryset=selectmodels.objects.all()
serializer_class = CategorySerializer # 序列化(疑点见下)
filter_class = CategoryFilter # 过滤器(疑点见下)
方案二 你不是在同一个文件定义的他们
- views.py
# 这里是一个数据库模型字典,你把你的往里面存就好了
database = {}
# 这是定义前端访问的全局数据库模型变量
selectmodels = None
# 前端访问对应路由函数
class viewtst(View):
# 装饰器decompose_parameter作用是将post的所有json参数转换成键值对add到kwargs
@method_decorator(decompose_parameter)
def post(self, request, *args, **kwargs):
# 导入全局数据库模型变量
global database
# 设置全局前端访问的数据库模型变量
global selectmodels
# 获取前端访问的数据库模型名称
dataname = kwargs.get('database')
# 设置全局变量为前端访问的数据库对象
selectmodels = database.get(dataname)
# 后续操作...
return JsonResponse({})
# 其他文件访问selectmodels 方法
def getselectmodels():
global selectmodels
return selectmodels
- others.py 这里以 models.py为例
from mterial.views import getselectmodels
class CategorySerializer(serializers.ModelSerializer):
#第二个问题: 这里也要写判断, 怎么拿到视图中获取的参数呢? 要改下面的model,把model改成变量,否则得写100遍
class Meta:
# Meta 调用全局变量 selectmodels
selectmodels=getselectmodels()
if selectmodels:
model=selectmodels
else:
#你可以在这里做一个错误处理
pass
fields='__all__'
class CategoryFilter(filters.FilterSet):
id = filters.CharFilter(lookup_expr='exact')
id_orderticket = filters.CharFilter(lookup_expr='exact')
order_date_gte = filters.DateFilter(field_name='order_date', lookup_expr='gte')
order_date_lte = filters.DateFilter(field_name='order_date', lookup_expr='lte')
project_name = filters.CharFilter(lookup_expr='icontains')
#第三个问题: 这里还要是要写判断, 来改下面的model,把model改成变量,否则也得写100遍
class Meta:
# Meta 调用全局变量
# Meta 调用全局变量 selectmodels
selectmodels = getselectmodels()
if selectmodels:
model = selectmodels
else:
# 你可以在这里做一个错误处理
pass
fields = ['id','id_orderticket','sample_name','order_date_gte','order_date_lte','project_name','is_active']
class CategoryView(ModelViewSet):
selectmodels = getselectmodels()
queryset=selectmodels.objects.all()
serializer_class = CategorySerializer # 序列化(疑点见下)
filter_class = CategoryFilter # 过滤器(疑点见下)