fastgenerateapi 1.1.27__tar.gz → 1.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fastgenerateapi might be problematic. Click here for more details.
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/PKG-INFO +2 -12
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/README.md +1 -11
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/__init__.py +1 -1
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/base_view.py +23 -11
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/create_view.py +26 -19
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/get_one_view.py +2 -1
- fastgenerateapi-1.2.1/fastgenerateapi/api_view/mixin/save_mixin.py +16 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/switch_view.py +3 -8
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/update_view.py +27 -17
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/common_function.py +2 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/create_schema_factory.py +39 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +42 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +39 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/update_schema_factory.py +39 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/app_settings.py +3 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi.egg-info/PKG-INFO +2 -12
- fastgenerateapi-1.1.27/fastgenerateapi/api_view/mixin/save_mixin.py +0 -14
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/LICENSE +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/delete_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/get_all_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/get_relation_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/get_tree_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/sql_get_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/deps/paginator_deps.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/all_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/script/__init__.py +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/setup.cfg +0 -0
- {fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fastgenerateapi
|
|
3
|
-
Version: 1.1
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: FastAPIView Class View
|
|
5
5
|
Author: ShiLiang
|
|
6
6
|
Author-email: 2509144896@qq.com
|
|
@@ -25,7 +25,7 @@ License-File: LICENSE
|
|
|
25
25
|
|
|
26
26
|
#### 版本说明
|
|
27
27
|
[pydantic-v2]
|
|
28
|
-
稳定版本:v1.1.
|
|
28
|
+
稳定版本:v1.1.29+
|
|
29
29
|
建议python版本:3.9+
|
|
30
30
|
推荐fastapi版本:0.103.2+
|
|
31
31
|
推荐pydantic版本:2.11.5+
|
|
@@ -107,16 +107,6 @@ class XxxView(APIView):
|
|
|
107
107
|
model_class = XxxModel
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
#### 继承 APIView 使用,关闭其中部分路由示例
|
|
111
|
-
```python
|
|
112
|
-
from core.crud.api_view import APIView
|
|
113
|
-
|
|
114
|
-
class XxxView(APIView):
|
|
115
|
-
create_route = False
|
|
116
|
-
get_one_route = False
|
|
117
|
-
update_route = False
|
|
118
|
-
delete_route = False
|
|
119
|
-
```
|
|
120
110
|
#### 查询/创建/修改字段限制及校验示例
|
|
121
111
|
- 如果有唯一字段或者联合唯一字段自动校验是否为唯一值
|
|
122
112
|
```python
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#### 版本说明
|
|
9
9
|
[pydantic-v2]
|
|
10
|
-
稳定版本:v1.1.
|
|
10
|
+
稳定版本:v1.1.29+
|
|
11
11
|
建议python版本:3.9+
|
|
12
12
|
推荐fastapi版本:0.103.2+
|
|
13
13
|
推荐pydantic版本:2.11.5+
|
|
@@ -89,16 +89,6 @@ class XxxView(APIView):
|
|
|
89
89
|
model_class = XxxModel
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
#### 继承 APIView 使用,关闭其中部分路由示例
|
|
93
|
-
```python
|
|
94
|
-
from core.crud.api_view import APIView
|
|
95
|
-
|
|
96
|
-
class XxxView(APIView):
|
|
97
|
-
create_route = False
|
|
98
|
-
get_one_route = False
|
|
99
|
-
update_route = False
|
|
100
|
-
delete_route = False
|
|
101
|
-
```
|
|
102
92
|
#### 查询/创建/修改字段限制及校验示例
|
|
103
93
|
- 如果有唯一字段或者联合唯一字段自动校验是否为唯一值
|
|
104
94
|
```python
|
|
@@ -25,6 +25,7 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
25
25
|
prefix: Optional[str] = None # 路由追加后缀
|
|
26
26
|
model_class: Optional[Type[Model]] = None # 数据库模型
|
|
27
27
|
prefetch_related_fields: Union[None, dict] = None
|
|
28
|
+
is_with_prefetch: Optional[bool] = False
|
|
28
29
|
schema: Optional[Type[BaseModel]] = None # 返回序列化[未使用]
|
|
29
30
|
dependencies: Optional[Sequence[params.Depends]] = None
|
|
30
31
|
tags: Optional[List[str]] = None # swagger标签
|
|
@@ -36,6 +37,7 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
36
37
|
"avatar": None, # 外键内容对应字典的形式
|
|
37
38
|
"avatar": ["id", ("url", "avatar_url")] # 增加 avatar_id,avatar_url2个字段
|
|
38
39
|
}
|
|
40
|
+
is_with_prefetch: 是否带有列表的prefetch_related_fields
|
|
39
41
|
|
|
40
42
|
# router_args: List[Union[str, tuple, BaseRouterSummary]] = None
|
|
41
43
|
# 给函数设置路由以及其他参数
|
|
@@ -158,36 +160,46 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
158
160
|
@classmethod
|
|
159
161
|
async def check_unique_field(
|
|
160
162
|
cls,
|
|
161
|
-
|
|
162
|
-
model_class: Type[Model],
|
|
163
|
+
data_dict: dict,
|
|
164
|
+
model_class: Type[Model],
|
|
163
165
|
model: Union[Model, None] = None
|
|
164
166
|
):
|
|
167
|
+
"""
|
|
168
|
+
校验模型中设置了 唯一索引和联合唯一索引 的字段
|
|
169
|
+
:param data_dict: 修改或创建的数据字典
|
|
170
|
+
:param model_class: 数据库模型
|
|
171
|
+
:param model: 修改前的数据,用于判断是否修改了字段,当唯一字段与数据data_dict一致时,不会做校验
|
|
172
|
+
:return:
|
|
173
|
+
"""
|
|
165
174
|
check_unique_fields = cls._get_unique_fields(model_class)
|
|
166
175
|
check_unique_together_fields = cls._get_unique_together_fields(model_class)
|
|
167
176
|
for unique_field in check_unique_fields:
|
|
168
|
-
if
|
|
169
|
-
|
|
177
|
+
if unique_field in data_dict:
|
|
178
|
+
unique_field_value = data_dict.get(unique_field)
|
|
179
|
+
if model and unique_field_value == getattr(model, unique_field):
|
|
170
180
|
continue
|
|
171
|
-
if await model_class.filter(**{unique_field:
|
|
172
|
-
return cls.error(msg=f"{cls.get_field_description(model_class, unique_field)}已存在相同值:{
|
|
181
|
+
if await model_class.filter(**{unique_field: unique_field_value}).first():
|
|
182
|
+
return cls.error(msg=f"{cls.get_field_description(model_class, unique_field)}已存在相同值:{unique_field_value}")
|
|
173
183
|
for unique_together_fields in check_unique_together_fields:
|
|
174
184
|
filter_fields = {}
|
|
175
185
|
is_equal = True
|
|
176
186
|
description_fields = []
|
|
177
187
|
for unique_together_field in unique_together_fields:
|
|
188
|
+
has_unique_together_field = unique_together_field in data_dict
|
|
189
|
+
unique_together_field_value = data_dict.get(unique_together_field)
|
|
178
190
|
if model:
|
|
179
|
-
if
|
|
180
|
-
filter_fields[unique_together_field] =
|
|
181
|
-
if
|
|
191
|
+
if has_unique_together_field:
|
|
192
|
+
filter_fields[unique_together_field] = unique_together_field_value
|
|
193
|
+
if unique_together_field_value != getattr(model, unique_together_field):
|
|
182
194
|
is_equal = False
|
|
183
195
|
description_fields.append(unique_together_field)
|
|
184
196
|
else:
|
|
185
197
|
filter_fields[unique_together_field] = getattr(model, unique_together_field)
|
|
186
198
|
else:
|
|
187
|
-
if
|
|
199
|
+
if has_unique_together_field:
|
|
188
200
|
is_equal = False
|
|
189
201
|
description_fields.append(unique_together_field)
|
|
190
|
-
filter_fields[unique_together_field] =
|
|
202
|
+
filter_fields[unique_together_field] = unique_together_field_value
|
|
191
203
|
if is_equal:
|
|
192
204
|
continue
|
|
193
205
|
|
|
@@ -36,43 +36,50 @@ class CreateView(BaseView, SaveMixin):
|
|
|
36
36
|
@atomic()
|
|
37
37
|
async def create(self, request_data, *args, **kwargs):
|
|
38
38
|
try:
|
|
39
|
-
|
|
39
|
+
data_dict = await self.set_create_fields(request_data=request_data, *args, **kwargs)
|
|
40
|
+
data_dict = await self.set_save_fields(data_dict, request_data=request_data, *args, **kwargs)
|
|
41
|
+
model = await self.set_create_model(data_dict, request_data=request_data, *args, **kwargs)
|
|
40
42
|
except ValueError as e:
|
|
41
43
|
error_field = str(e).split(" ")[0]
|
|
42
44
|
if getattr(request_data, error_field):
|
|
43
45
|
return self.error(msg=f"{self.get_field_description(self.model_class, error_field)}格式不正确")
|
|
44
46
|
return self.error(msg=f"{self.get_field_description(self.model_class, error_field)}不能为空")
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
model = await self.set_create_model(model=model, request_data=request_data, *args, **kwargs)
|
|
49
|
-
|
|
50
|
-
await self.check_unique_field(model, model_class=self.model_class)
|
|
51
|
-
|
|
48
|
+
await self.check_unique_field(data_dict, model_class=self.model_class)
|
|
52
49
|
await model.save()
|
|
53
50
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
if settings.app_settings.WHETHER_CREATE_RESPONSE_DATA:
|
|
52
|
+
if self.is_with_prefetch:
|
|
53
|
+
model = await self.get_object(model.id, self.model_class, self.is_with_prefetch)
|
|
54
|
+
await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields)
|
|
58
55
|
|
|
59
|
-
|
|
56
|
+
return self.create_response_schema.model_validate(model)
|
|
60
57
|
|
|
61
|
-
return
|
|
58
|
+
return
|
|
62
59
|
|
|
63
|
-
async def set_create_fields(self, request_data, *args, **kwargs):
|
|
60
|
+
async def set_create_fields(self, request_data, *args, **kwargs) -> dict:
|
|
64
61
|
"""
|
|
65
|
-
添加属性:
|
|
62
|
+
添加属性:
|
|
63
|
+
data_dict = request_data.dict(exclude_unset=True)
|
|
64
|
+
data_dict.update({
|
|
65
|
+
"user_id": request.user.id,
|
|
66
|
+
})
|
|
67
|
+
return data_dict
|
|
66
68
|
"""
|
|
67
69
|
|
|
68
|
-
return
|
|
70
|
+
return request_data.dict(exclude_unset=True)
|
|
69
71
|
|
|
70
|
-
async def set_create_model(self,
|
|
72
|
+
async def set_create_model(self, data_dict: dict, request_data, *args, **kwargs) -> Model:
|
|
71
73
|
"""
|
|
72
|
-
|
|
74
|
+
在数据模型校验前后修改值
|
|
75
|
+
- 可用于全局修改
|
|
76
|
+
添加属性:
|
|
77
|
+
data_dict.update({
|
|
78
|
+
"user_id": request.user.id,
|
|
79
|
+
})
|
|
73
80
|
"""
|
|
74
81
|
|
|
75
|
-
return
|
|
82
|
+
return self.model_class(**data_dict)
|
|
76
83
|
|
|
77
84
|
def _create_decorator(self, *args: Any, **kwargs: Any) -> DecoratedCallable:
|
|
78
85
|
async def route(
|
|
@@ -25,7 +25,6 @@ class GetOneView(BaseView, GetMixin):
|
|
|
25
25
|
|
|
26
26
|
get_one_route: Union[bool, DEPENDENCIES] = True
|
|
27
27
|
get_one_schema: Optional[Type[BaseModel]] = None
|
|
28
|
-
is_with_prefetch: Optional[bool] = False
|
|
29
28
|
"""
|
|
30
29
|
get_one_route: 获取详情路由开关,可以放依赖函数列表
|
|
31
30
|
get_one_schema: 返回序列化
|
|
@@ -35,6 +34,8 @@ class GetOneView(BaseView, GetMixin):
|
|
|
35
34
|
- 优选模型层get_one_include和get_one_exclude(同时存在交集)
|
|
36
35
|
- 合并模型层include和exclude(同时存在交集)
|
|
37
36
|
- 模型层所有字段
|
|
37
|
+
|
|
38
|
+
prefetch_related_fields:额外展示字段
|
|
38
39
|
is_with_prefetch: 是否带有列表的prefetch_related_fields
|
|
39
40
|
"""
|
|
40
41
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from tortoise import Model
|
|
2
|
+
|
|
3
|
+
from fastgenerateapi.pydantic_utils.base_model import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SaveMixin:
|
|
7
|
+
|
|
8
|
+
async def set_save_fields(self, data_dict: dict, *args, **kwargs) -> dict:
|
|
9
|
+
"""
|
|
10
|
+
添加属性: data_dict['user_id'] = current_user.id
|
|
11
|
+
kwargs 包含 request_data
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
return data_dict
|
|
15
|
+
|
|
16
|
+
|
|
@@ -28,21 +28,16 @@ class SwitchView(BaseView):
|
|
|
28
28
|
except Exception:
|
|
29
29
|
request_data = {}
|
|
30
30
|
|
|
31
|
-
model = await self.
|
|
32
|
-
if not model:
|
|
33
|
-
raise NOT_FOUND
|
|
34
|
-
|
|
31
|
+
model = await self.get_object(pk, self.model_class, is_with_prefetch=self.is_with_prefetch)
|
|
35
32
|
setattr(
|
|
36
33
|
model,
|
|
37
34
|
filed,
|
|
38
35
|
not getattr(model, filed) if request_data.get(filed) is None else request_data.get(filed)
|
|
39
36
|
)
|
|
40
|
-
|
|
41
37
|
await model.save()
|
|
42
38
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
# await self.setattr_model_rpc(self.rpc_class, model, self.rpc_param)
|
|
39
|
+
if self.is_with_prefetch:
|
|
40
|
+
await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields)
|
|
46
41
|
|
|
47
42
|
return self.get_one_schema.from_orm(model)
|
|
48
43
|
|
|
@@ -31,36 +31,46 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
31
31
|
|
|
32
32
|
@atomic()
|
|
33
33
|
async def update(self, pk: str, request_data, *args, **kwargs):
|
|
34
|
-
model = await self.get_object(pk, self.model_class)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
await self.check_unique_field(request_data, model_class=self.model_class, model=model)
|
|
39
|
-
|
|
40
|
-
model = await self.set_save_model(model=model, request_data=request_data, *args, **kwargs)
|
|
41
|
-
|
|
42
|
-
model = await self.set_update_model(model=model, request_data=request_data, *args, **kwargs)
|
|
34
|
+
model = await self.get_object(pk, self.model_class, self.is_with_prefetch)
|
|
35
|
+
data_dict = await self.set_update_fields(request_data=request_data, *args, **kwargs)
|
|
36
|
+
data_dict = await self.set_save_fields(data_dict, request_data=request_data, *args, **kwargs)
|
|
43
37
|
|
|
38
|
+
await self.check_unique_field(data_dict, model_class=self.model_class, model=model)
|
|
39
|
+
model = await self.set_update_model(model, data_dict, request_data=request_data, *args, **kwargs)
|
|
44
40
|
await model.save()
|
|
45
41
|
|
|
46
|
-
|
|
42
|
+
if settings.app_settings.WHETHER_UPDATE_RESPONSE_DATA:
|
|
43
|
+
if self.is_with_prefetch:
|
|
44
|
+
await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields, *args, **kwargs)
|
|
47
45
|
|
|
48
|
-
|
|
46
|
+
return self.update_response_schema.from_orm(model)
|
|
49
47
|
|
|
50
|
-
return
|
|
48
|
+
return
|
|
51
49
|
|
|
52
50
|
@staticmethod
|
|
53
51
|
async def set_update_fields(request_data, *args, **kwargs):
|
|
54
52
|
"""
|
|
55
|
-
修改属性:
|
|
53
|
+
修改属性:
|
|
54
|
+
data_dict = request_data.dict(exclude_unset=True)
|
|
55
|
+
data_dict.update({
|
|
56
|
+
"user_id": request.user.id,
|
|
57
|
+
})
|
|
58
|
+
return data_dict
|
|
56
59
|
"""
|
|
57
|
-
return request_data
|
|
58
60
|
|
|
59
|
-
|
|
61
|
+
return request_data.dict(exclude_unset=True)
|
|
62
|
+
|
|
63
|
+
async def set_update_model(self, model: Model, data_dict: dict, *args, **kwargs) -> Model:
|
|
60
64
|
"""
|
|
61
|
-
|
|
65
|
+
在数据模型校验前后修改值:
|
|
66
|
+
- 【不常使用】:这里修改将不做唯一字段校验
|
|
67
|
+
- 可用于全局修改
|
|
68
|
+
data_dict.update({
|
|
69
|
+
"user_id": request.user.id,
|
|
70
|
+
})
|
|
62
71
|
"""
|
|
63
|
-
|
|
72
|
+
|
|
73
|
+
return model.update_from_dict(data_dict)
|
|
64
74
|
|
|
65
75
|
def _update_decorator(self, *args: Any, **kwargs: Any) -> DecoratedCallable:
|
|
66
76
|
async def route(
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/common_function.py
RENAMED
|
@@ -95,6 +95,8 @@ def get_dict_from_pydanticmeta(model_class: Type[Model], data: Union[list, tuple
|
|
|
95
95
|
if len(field) == 2:
|
|
96
96
|
if isinstance(field[1], str):
|
|
97
97
|
key_field = field[1]
|
|
98
|
+
if isinstance(field[2], FieldInfo):
|
|
99
|
+
field_info = field[1]
|
|
98
100
|
else:
|
|
99
101
|
field_type = field[1]
|
|
100
102
|
elif len(field) == 3:
|
|
@@ -21,6 +21,45 @@ def create_schema_factory(
|
|
|
21
21
|
) -> Type[T]:
|
|
22
22
|
"""
|
|
23
23
|
Is used to create a CreateSchema
|
|
24
|
+
固定排除 逻辑删除字段
|
|
25
|
+
会默认添加模型下 PydanticMeta 设置的相关属性
|
|
26
|
+
- include: 增改详情列表通用,指定包含字段,不指定默认包含所有字段
|
|
27
|
+
- exclude: 增改详情列表通用,指定排除字段
|
|
28
|
+
- save_include: 增改通用,额外添加字段
|
|
29
|
+
- save_exclude: 增改通用,指定排除字段
|
|
30
|
+
- create_include: 增使用,额外添加字段
|
|
31
|
+
- create_exclude: 增使用,指定排除字段
|
|
32
|
+
|
|
33
|
+
逻辑顺序:合并所有include和exclude,排除include下包含的exclude字段
|
|
34
|
+
|
|
35
|
+
参数类型可选
|
|
36
|
+
- include类型:
|
|
37
|
+
- 字符串:【模型存在字段】自动生成,【模型不存在字段】默认字符串类型,无注释
|
|
38
|
+
- 2个值:
|
|
39
|
+
- (字符串, 类型int): 指定导出类型
|
|
40
|
+
- (字符串, FieldInfo()):
|
|
41
|
+
- (字符串1, 字符串2): 导出字段重命名。例如 ("name", "export_name")
|
|
42
|
+
- 3个值:
|
|
43
|
+
- (字符串1, 字符串2, 类型int):
|
|
44
|
+
- (字符串, 字符串2, FieldInfo()):
|
|
45
|
+
- (字符串, 类型int, FieldInfo()):
|
|
46
|
+
- 4个值:
|
|
47
|
+
- (字符串1, 字符串2, 类型int, FieldInfo()):
|
|
48
|
+
- exclude类型:仅字符串
|
|
49
|
+
|
|
50
|
+
示例:
|
|
51
|
+
class model_class:
|
|
52
|
+
...
|
|
53
|
+
|
|
54
|
+
PydanticMeta:
|
|
55
|
+
include = []
|
|
56
|
+
exclude = []
|
|
57
|
+
save_include = [
|
|
58
|
+
("item_id_list", List[str], FieldInfo(description="多对多关联id列表")),
|
|
59
|
+
]
|
|
60
|
+
save_exclude = ["ignore_field"]
|
|
61
|
+
create_include = ["create_user"]
|
|
62
|
+
create_exclude = []
|
|
24
63
|
"""
|
|
25
64
|
all_fields_info = get_dict_from_model_fields(model_class)
|
|
26
65
|
|
|
@@ -27,6 +27,48 @@ def get_all_schema_factory(
|
|
|
27
27
|
) -> Optional[Type[T]]:
|
|
28
28
|
"""
|
|
29
29
|
Is used to create a GetAllSchema
|
|
30
|
+
固定排除 逻辑删除字段
|
|
31
|
+
会默认添加模型下 PydanticMeta 设置的相关属性
|
|
32
|
+
- include: 增改详情列表通用,指定包含字段,不指定默认包含所有字段
|
|
33
|
+
- exclude: 增改详情列表通用,指定排除字段
|
|
34
|
+
- get_include: 详情列表通用,额外添加字段
|
|
35
|
+
- get_exclude: 详情列表通用,指定排除字段
|
|
36
|
+
- get_all_include: 详情使用,额外添加字段
|
|
37
|
+
- get_all_exclude: 详情使用,指定排除字段
|
|
38
|
+
|
|
39
|
+
逻辑顺序:合并所有include和exclude,排除include下包含的exclude字段
|
|
40
|
+
|
|
41
|
+
参数类型可选
|
|
42
|
+
- include类型:
|
|
43
|
+
- 字符串:【模型存在字段】自动生成,【模型不存在字段】默认字符串类型,无注释
|
|
44
|
+
- 2个值:
|
|
45
|
+
- (字符串, 类型int): 指定导出类型
|
|
46
|
+
- (字符串, FieldInfo()):
|
|
47
|
+
- (字符串1, 字符串2): 导出字段重命名。例如 ("name", "export_name")
|
|
48
|
+
- 3个值:
|
|
49
|
+
- (字符串1, 字符串2, 类型int):
|
|
50
|
+
- (字符串, 字符串2, FieldInfo()):
|
|
51
|
+
- (字符串, 类型int, FieldInfo()):
|
|
52
|
+
- 4个值:
|
|
53
|
+
- (字符串1, 字符串2, 类型int, FieldInfo()):
|
|
54
|
+
- exclude类型:仅字符串
|
|
55
|
+
|
|
56
|
+
示例:
|
|
57
|
+
class model_class:
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
PydanticMeta:
|
|
61
|
+
include = []
|
|
62
|
+
exclude = []
|
|
63
|
+
get_include = [
|
|
64
|
+
("name", "export_name"),
|
|
65
|
+
("item_id_list", List[str], FieldInfo(description="多对多关联id列表")),
|
|
66
|
+
]
|
|
67
|
+
get_exclude = ["hide_field"]
|
|
68
|
+
get_all_include = [
|
|
69
|
+
("item_names", str, FieldInfo(description="多对多关联名称集合"))
|
|
70
|
+
]
|
|
71
|
+
get_all_exclude = []
|
|
30
72
|
"""
|
|
31
73
|
all_fields_info = get_dict_from_model_fields(model_class)
|
|
32
74
|
|
|
@@ -20,6 +20,45 @@ def get_one_schema_factory(
|
|
|
20
20
|
) -> Type[T]:
|
|
21
21
|
"""
|
|
22
22
|
Is used to create a GetOneSchema
|
|
23
|
+
固定排除 逻辑删除字段
|
|
24
|
+
会默认添加模型下 PydanticMeta 设置的相关属性
|
|
25
|
+
- include: 增改详情列表通用,指定包含字段,不指定默认包含所有字段
|
|
26
|
+
- exclude: 增改详情列表通用,指定排除字段
|
|
27
|
+
- get_include: 详情列表通用,额外添加字段
|
|
28
|
+
- get_exclude: 详情列表通用,指定排除字段
|
|
29
|
+
- get_one_include: 详情使用,额外添加字段
|
|
30
|
+
- get_one_exclude: 详情使用,指定排除字段
|
|
31
|
+
|
|
32
|
+
逻辑顺序:合并所有include和exclude,排除include下包含的exclude字段
|
|
33
|
+
|
|
34
|
+
参数类型可选
|
|
35
|
+
- include类型:
|
|
36
|
+
- 字符串:【模型存在字段】自动生成,【模型不存在字段】默认字符串类型,无注释
|
|
37
|
+
- 2个值:
|
|
38
|
+
- (字符串, 类型int): 指定导出类型
|
|
39
|
+
- (字符串, FieldInfo()):
|
|
40
|
+
- (字符串1, 字符串2): 导出字段重命名。例如 ("name", "export_name")
|
|
41
|
+
- 3个值:
|
|
42
|
+
- (字符串1, 字符串2, 类型int):
|
|
43
|
+
- (字符串, 字符串2, FieldInfo()):
|
|
44
|
+
- (字符串, 类型int, FieldInfo()):
|
|
45
|
+
- 4个值:
|
|
46
|
+
- (字符串1, 字符串2, 类型int, FieldInfo()):
|
|
47
|
+
- exclude类型:仅字符串
|
|
48
|
+
|
|
49
|
+
示例:
|
|
50
|
+
class model_class:
|
|
51
|
+
...
|
|
52
|
+
|
|
53
|
+
PydanticMeta:
|
|
54
|
+
include = []
|
|
55
|
+
exclude = []
|
|
56
|
+
get_include = [("name", "export_name")]
|
|
57
|
+
get_exclude = ["hide_field"]
|
|
58
|
+
get_one_include = [
|
|
59
|
+
("item_id_list", List[str], FieldInfo(description="多对多关联id列表"))
|
|
60
|
+
]
|
|
61
|
+
get_one_exclude = []
|
|
23
62
|
"""
|
|
24
63
|
all_fields_info: dict = get_dict_from_model_fields(model_class)
|
|
25
64
|
|
|
@@ -21,6 +21,45 @@ def update_schema_factory(
|
|
|
21
21
|
) -> Type[T]:
|
|
22
22
|
"""
|
|
23
23
|
Is used to create a UpdateSchema
|
|
24
|
+
固定排除 逻辑删除字段
|
|
25
|
+
会默认添加模型下 PydanticMeta 设置的相关属性
|
|
26
|
+
- include: 增改详情列表通用,指定包含字段,不指定默认包含所有字段
|
|
27
|
+
- exclude: 增改详情列表通用,指定排除字段
|
|
28
|
+
- save_include: 增改通用,额外添加字段
|
|
29
|
+
- save_exclude: 增改通用,指定排除字段
|
|
30
|
+
- update_include: 增使用,额外添加字段
|
|
31
|
+
- update_exclude: 增使用,指定排除字段
|
|
32
|
+
|
|
33
|
+
逻辑顺序:合并所有include和exclude,排除include下包含的exclude字段
|
|
34
|
+
|
|
35
|
+
参数类型可选
|
|
36
|
+
- include类型:
|
|
37
|
+
- 字符串:【模型存在字段】自动生成,【模型不存在字段】默认字符串类型,无注释
|
|
38
|
+
- 2个值:
|
|
39
|
+
- (字符串, 类型int): 指定导出类型
|
|
40
|
+
- (字符串, FieldInfo()):
|
|
41
|
+
- (字符串1, 字符串2): 导出字段重命名。例如 ("name", "export_name")
|
|
42
|
+
- 3个值:
|
|
43
|
+
- (字符串1, 字符串2, 类型int):
|
|
44
|
+
- (字符串, 字符串2, FieldInfo()):
|
|
45
|
+
- (字符串, 类型int, FieldInfo()):
|
|
46
|
+
- 4个值:
|
|
47
|
+
- (字符串1, 字符串2, 类型int, FieldInfo()):
|
|
48
|
+
- exclude类型:仅字符串
|
|
49
|
+
|
|
50
|
+
示例:
|
|
51
|
+
class model_class:
|
|
52
|
+
...
|
|
53
|
+
|
|
54
|
+
PydanticMeta:
|
|
55
|
+
include = []
|
|
56
|
+
exclude = []
|
|
57
|
+
save_include = [
|
|
58
|
+
("item_id_list", List[str], FieldInfo(description="多对多关联id列表")),
|
|
59
|
+
]
|
|
60
|
+
save_exclude = ["ignore_field"]
|
|
61
|
+
update_include = ["update_user"]
|
|
62
|
+
update_exclude = []
|
|
24
63
|
"""
|
|
25
64
|
all_fields_info = get_dict_from_model_fields(model_class)
|
|
26
65
|
|
|
@@ -76,6 +76,9 @@ class AppSettings(BaseSettings):
|
|
|
76
76
|
MESSAGE_RESPONSE_FIELD: Optional[str] = Field(default="msg", description="消息返回字段")
|
|
77
77
|
DATA_RESPONSE_FIELD: Optional[str] = Field(default="data", description="数据返回字段")
|
|
78
78
|
LIST_RESPONSE_FIELD: Optional[str] = Field(default="list", description="列表页返回字段")
|
|
79
|
+
# 创建和修改是否返回详情
|
|
80
|
+
WHETHER_CREATE_RESPONSE_DATA: Optional[bool] = Field(default=False, description="创建是否返回详情")
|
|
81
|
+
WHETHER_UPDATE_RESPONSE_DATA: Optional[bool] = Field(default=False, description="修改是否返回详情")
|
|
79
82
|
|
|
80
83
|
# GetAll 筛选是否双下划线转单下划线
|
|
81
84
|
FILTER_UNDERLINE_WHETHER_DOUBLE_TO_SINGLE: Optional[bool] = Field(default=True, description="筛选是否双下划线转单下划线")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fastgenerateapi
|
|
3
|
-
Version: 1.1
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: FastAPIView Class View
|
|
5
5
|
Author: ShiLiang
|
|
6
6
|
Author-email: 2509144896@qq.com
|
|
@@ -25,7 +25,7 @@ License-File: LICENSE
|
|
|
25
25
|
|
|
26
26
|
#### 版本说明
|
|
27
27
|
[pydantic-v2]
|
|
28
|
-
稳定版本:v1.1.
|
|
28
|
+
稳定版本:v1.1.29+
|
|
29
29
|
建议python版本:3.9+
|
|
30
30
|
推荐fastapi版本:0.103.2+
|
|
31
31
|
推荐pydantic版本:2.11.5+
|
|
@@ -107,16 +107,6 @@ class XxxView(APIView):
|
|
|
107
107
|
model_class = XxxModel
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
#### 继承 APIView 使用,关闭其中部分路由示例
|
|
111
|
-
```python
|
|
112
|
-
from core.crud.api_view import APIView
|
|
113
|
-
|
|
114
|
-
class XxxView(APIView):
|
|
115
|
-
create_route = False
|
|
116
|
-
get_one_route = False
|
|
117
|
-
update_route = False
|
|
118
|
-
delete_route = False
|
|
119
|
-
```
|
|
120
110
|
#### 查询/创建/修改字段限制及校验示例
|
|
121
111
|
- 如果有唯一字段或者联合唯一字段自动校验是否为唯一值
|
|
122
112
|
```python
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from tortoise import Model
|
|
2
|
-
|
|
3
|
-
from fastgenerateapi.pydantic_utils.base_model import BaseModel
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class SaveMixin:
|
|
7
|
-
|
|
8
|
-
async def set_save_model(self, model: Model, request_data, *args, **kwargs) -> Model:
|
|
9
|
-
"""
|
|
10
|
-
添加属性: model.user_id = current_user.id
|
|
11
|
-
"""
|
|
12
|
-
return model
|
|
13
|
-
|
|
14
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/delete_filter_view.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/delete_tree_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/base_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/get_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/docx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/file_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/pdf_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/mixin/utils/zip_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/api_view/update_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/channel/connection_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/filter_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/router_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/controller/ws_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/data_type/mysql_data_type.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/fastapi_utils/param_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/fastapi_utils/response_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/pydantic_utils/base_model.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/pydantic_utils/base_settings.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/pydantic_utils/json_encoders.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/schemas_factory/response_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi/settings/system_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.27 → fastgenerateapi-1.2.1}/fastgenerateapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|