Skip to content

Commit 727346a

Browse files
committed
feat: new export mixin
BREAKING CHANGE: Uncompatible with previous version!
1 parent d948a63 commit 727346a

34 files changed

Lines changed: 1733 additions & 1188 deletions

.travis.yml

Lines changed: 0 additions & 5 deletions
This file was deleted.

.editorconfig

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# http://editorconfig.org
2+
3+
root = true
4+
5+
[*]
6+
charset = utf-8
7+
end_of_line = lf
8+
insert_final_newline = true
9+
trim_trailing_whitespace = true
10+
11+
[*.{py,rst,ini}]
12+
indent_style = space
13+
indent_size = 4
14+
15+
[*.{html,css,scss,json,yml,xml}]
16+
indent_style = space
17+
indent_size = 2
18+
19+
[*.md]
20+
trim_trailing_whitespace = false
21+
22+
[Makefile]
23+
indent_style = tab
24+
25+
[nginx.conf]
26+
indent_style = space
27+
indent_size = 2

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* text=auto

.pre-commit-config.yaml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@ repos:
88
- id: check-ast
99
- id: trailing-whitespace
1010
- id: end-of-file-fixer
11-
- id: check-case-conflict
1211
- id: mixed-line-ending
1312
- id: detect-private-key
14-
- id: debug-statements
1513
- id: check-yaml
1614
- id: check-toml
1715

@@ -21,12 +19,6 @@ repos:
2119
- id: commitizen
2220
stages: [commit-msg]
2321

24-
- repo: https://github.com/asottile/pyupgrade
25-
rev: v2.34.0
26-
hooks:
27-
- id: pyupgrade
28-
args: [--py39-plus]
29-
3022
- repo: https://github.com/psf/black
3123
rev: 22.3.0
3224
hooks:

MANIFEST.in

Lines changed: 0 additions & 17 deletions
This file was deleted.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,4 @@ $ ./manage.py test
123123

124124
## Thanks
125125

126-
[![PyCharm](docs/pycharm.svg)](https://www.jetbrains.com/?from=drfexts)
126+
[![PyCharm](docs/pycharm.svg)](https://www.jetbrains.com/?from=drfexts)

drfexts/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '0.15.0'
1+
__version__ = "0.15.1"

drfexts/exceptions.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
from django.conf import settings
77
from rest_framework.response import Response
88
from rest_framework.status import HTTP_500_INTERNAL_SERVER_ERROR
9-
from rest_framework.views import set_rollback, exception_handler
9+
from rest_framework.views import exception_handler, set_rollback
1010

1111

1212
def _get_detail(detail):
1313
if isinstance(detail, list):
14-
return ''.join([x if isinstance(x, str) else _get_detail(x) for x in detail])
15-
result = ''
14+
return "".join([x if isinstance(x, str) else _get_detail(x) for x in detail])
15+
result = ""
1616
for v in detail.values():
1717
result += _get_detail(v)
1818
return result

drfexts/fields.py

Lines changed: 60 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@
22
from functools import partial
33

44
from django.conf import settings
5-
from django.contrib.postgres.fields import ArrayField as PGArrayField
65
from django.contrib.contenttypes import fields as ct_fields
7-
from django.db import models
6+
from django.contrib.postgres.fields import ArrayField as PGArrayField
87
from django.core import checks
8+
from django.db import models
99
from django.db.models import CASCADE
1010
from django_currentuser.db.models import CurrentUserField
1111

12-
from .constants import CommonStatus, AuditStatus
12+
from .constants import AuditStatus, CommonStatus
1313
from .utils import get_serial_code
1414

1515

1616
class DefaultHelpTextMixin:
1717
def __init__(self, verbose_name, *args, **kwargs):
18-
kwargs.setdefault('help_text', verbose_name)
18+
kwargs.setdefault("help_text", verbose_name)
1919
super().__init__(verbose_name, *args, **kwargs)
2020

2121

2222
class NullHelpTextMixin:
2323
def __init__(self, verbose_name, *args, **kwargs):
24-
kwargs['null'] = False
25-
kwargs.setdefault('help_text', verbose_name)
24+
kwargs["null"] = False
25+
kwargs.setdefault("help_text", verbose_name)
2626
super().__init__(verbose_name, *args, **kwargs)
2727

2828

@@ -48,7 +48,7 @@ def _check_related_name(self, **kwargs):
4848

4949
class AutoField(models.AutoField):
5050
def __init__(self, verbose_name="主键", **kwargs):
51-
kwargs.setdefault('help_text', verbose_name)
51+
kwargs.setdefault("help_text", verbose_name)
5252
super().__init__(verbose_name, **kwargs)
5353

5454

@@ -142,16 +142,16 @@ class JSONField(DefaultHelpTextMixin, models.JSONField):
142142

143143
class ArrayField(PGArrayField):
144144
def __init__(self, verbose_name, base_field, **kwargs):
145-
kwargs.setdefault('help_text', verbose_name)
146-
kwargs.setdefault('verbose_name', verbose_name)
145+
kwargs.setdefault("help_text", verbose_name)
146+
kwargs.setdefault("verbose_name", verbose_name)
147147
super().__init__(base_field, **kwargs)
148148

149149

150150
class AutoUUIDField(models.UUIDField):
151151
def __init__(self, verbose_name="主键", **kwargs):
152-
kwargs['blank'] = True
152+
kwargs["blank"] = True
153153
kwargs["default"] = uuid.uuid4
154-
kwargs.setdefault('help_text', verbose_name)
154+
kwargs.setdefault("help_text", verbose_name)
155155
kwargs.setdefault("primary_key", True)
156156
super().__init__(verbose_name, **kwargs)
157157

@@ -165,18 +165,18 @@ class DefaultCodeField(models.CharField):
165165

166166
def __init__(self, verbose_name="编号", prefix="", **kwargs):
167167
self.prefix = prefix
168-
kwargs['blank'] = True
168+
kwargs["blank"] = True
169169
kwargs["default"] = partial(get_serial_code, prefix)
170170
kwargs["max_length"] = self.DEFAULT_LENGTH + len(prefix)
171-
kwargs['editable'] = False
171+
kwargs["editable"] = False
172172
kwargs.setdefault("help_text", verbose_name)
173173
super().__init__(verbose_name, **kwargs)
174174

175175
def deconstruct(self):
176176
name, path, args, kwargs = super().deconstruct()
177177
# Only include kwarg if it's not the default
178178
if self.prefix != "":
179-
kwargs['prefix'] = self.prefix
179+
kwargs["prefix"] = self.prefix
180180
return name, path, args, kwargs
181181

182182

@@ -186,8 +186,8 @@ class DescriptionField(models.TextField):
186186
"""
187187

188188
def __init__(self, verbose_name="描述", **kwargs):
189-
kwargs.setdefault('blank', True)
190-
kwargs.setdefault('help_text', verbose_name)
189+
kwargs.setdefault("blank", True)
190+
kwargs.setdefault("help_text", verbose_name)
191191
super().__init__(verbose_name, **kwargs)
192192

193193

@@ -200,7 +200,7 @@ def __init__(self, verbose_name="关联的用户", to=None, on_delete=None, **kw
200200
to = to or settings.AUTH_USER_MODEL
201201
on_delete = on_delete or CASCADE
202202
kwargs.setdefault("db_constraint", False)
203-
kwargs.setdefault('help_text', verbose_name)
203+
kwargs.setdefault("help_text", verbose_name)
204204
super().__init__(to=to, verbose_name=verbose_name, on_delete=on_delete, **kwargs)
205205

206206

@@ -210,10 +210,10 @@ class UpdatedAtField(models.DateTimeField):
210210
"""
211211

212212
def __init__(self, verbose_name="修改时间", **kwargs):
213-
kwargs['editable'] = False
214-
kwargs['auto_now'] = True
215-
kwargs.setdefault('help_text', '该记录的最后修改时间')
216-
kwargs.setdefault('blank', True)
213+
kwargs["editable"] = False
214+
kwargs["auto_now"] = True
215+
kwargs.setdefault("help_text", "该记录的最后修改时间")
216+
kwargs.setdefault("blank", True)
217217
super().__init__(verbose_name, **kwargs)
218218

219219

@@ -223,10 +223,10 @@ class CreatedAtField(models.DateTimeField):
223223
"""
224224

225225
def __init__(self, verbose_name="创建时间", **kwargs):
226-
kwargs['editable'] = False
227-
kwargs['auto_now_add'] = True
228-
kwargs.setdefault('help_text', '该记录的创建时间')
229-
kwargs.setdefault('blank', True)
226+
kwargs["editable"] = False
227+
kwargs["auto_now_add"] = True
228+
kwargs.setdefault("help_text", "该记录的创建时间")
229+
kwargs.setdefault("blank", True)
230230
super().__init__(verbose_name, **kwargs)
231231

232232

@@ -236,11 +236,11 @@ class CreatedByField(CurrentUserField):
236236
"""
237237

238238
def __init__(self, *args, **kwargs):
239-
kwargs.setdefault('verbose_name', '创建人')
240-
kwargs.setdefault('help_text', '该记录的创建者')
241-
kwargs.setdefault('related_name', '%(class)s_created_by')
239+
kwargs.setdefault("verbose_name", "创建人")
240+
kwargs.setdefault("help_text", "该记录的创建者")
241+
kwargs.setdefault("related_name", "%(class)s_created_by")
242242
kwargs.setdefault("on_delete", models.CASCADE)
243-
kwargs['db_constraint'] = False
243+
kwargs["db_constraint"] = False
244244
super().__init__(*args, **kwargs)
245245

246246
def _warn_for_shadowing_args(self, *args, **kwargs):
@@ -253,12 +253,12 @@ class UpdatedByField(CurrentUserField):
253253
"""
254254

255255
def __init__(self, *args, **kwargs):
256-
kwargs.setdefault('on_update', True)
257-
kwargs.setdefault('verbose_name', '修改人')
258-
kwargs.setdefault('help_text', '该记录的修改人')
259-
kwargs.setdefault('related_name', '%(class)s_updated_by')
256+
kwargs.setdefault("on_update", True)
257+
kwargs.setdefault("verbose_name", "修改人")
258+
kwargs.setdefault("help_text", "该记录的修改人")
259+
kwargs.setdefault("related_name", "%(class)s_updated_by")
260260
kwargs.setdefault("on_delete", models.CASCADE)
261-
kwargs['db_constraint'] = False
261+
kwargs["db_constraint"] = False
262262
super().__init__(*args, **kwargs)
263263

264264
def _warn_for_shadowing_args(self, *args, **kwargs):
@@ -271,11 +271,11 @@ class CreatorCharField(models.CharField):
271271
"""
272272

273273
def __init__(self, *args, **kwargs):
274-
kwargs.setdefault('max_length', 128)
275-
kwargs.setdefault('null', True)
276-
kwargs.setdefault('blank', True)
277-
kwargs.setdefault('verbose_name', '创建者')
278-
kwargs.setdefault('help_text', '该记录的创建者')
274+
kwargs.setdefault("max_length", 128)
275+
kwargs.setdefault("null", True)
276+
kwargs.setdefault("blank", True)
277+
kwargs.setdefault("verbose_name", "创建者")
278+
kwargs.setdefault("help_text", "该记录的创建者")
279279
super().__init__(*args, **kwargs)
280280

281281

@@ -285,11 +285,11 @@ class ModifierCharField(models.CharField):
285285
"""
286286

287287
def __init__(self, *args, **kwargs):
288-
kwargs.setdefault('max_length', 128)
289-
kwargs.setdefault('null', True)
290-
kwargs.setdefault('blank', True)
291-
kwargs.setdefault('verbose_name', '修改者')
292-
kwargs.setdefault('help_text', '该记录最后修改者')
288+
kwargs.setdefault("max_length", 128)
289+
kwargs.setdefault("null", True)
290+
kwargs.setdefault("blank", True)
291+
kwargs.setdefault("verbose_name", "修改者")
292+
kwargs.setdefault("help_text", "该记录最后修改者")
293293
super().__init__(*args, **kwargs)
294294

295295

@@ -299,9 +299,9 @@ class StatusField(models.PositiveSmallIntegerField):
299299
"""
300300

301301
def __init__(self, verbose_name="状态", **kwargs):
302-
kwargs.setdefault('choices', CommonStatus.choices)
303-
kwargs.setdefault('default', CommonStatus.VALID)
304-
kwargs.setdefault('help_text', '100:已失效,75:待失效,50:有效,25:暂停中,10:待生效,5:待提交,0:删除')
302+
kwargs.setdefault("choices", CommonStatus.choices)
303+
kwargs.setdefault("default", CommonStatus.VALID)
304+
kwargs.setdefault("help_text", "100:已失效,75:待失效,50:有效,25:暂停中,10:待生效,5:待提交,0:删除")
305305
super().__init__(verbose_name, **kwargs)
306306

307307

@@ -311,17 +311,17 @@ class AuditStatusField(models.PositiveSmallIntegerField):
311311
"""
312312

313313
def __init__(self, verbose_name="审核状态", **kwargs):
314-
kwargs.setdefault('choices', AuditStatus.choices)
315-
kwargs.setdefault('null', True)
316-
kwargs.setdefault('blank', True)
317-
kwargs.setdefault('help_text', '该记录的审核状态')
314+
kwargs.setdefault("choices", AuditStatus.choices)
315+
kwargs.setdefault("null", True)
316+
kwargs.setdefault("blank", True)
317+
kwargs.setdefault("help_text", "该记录的审核状态")
318318
super().__init__(verbose_name, **kwargs)
319319

320320

321321
class VirtualForeignKey(models.ForeignKey):
322322
def __init__(self, verbose_name, to, *args, **kwargs):
323323
kwargs.setdefault("verbose_name", verbose_name)
324-
kwargs['db_constraint'] = False
324+
kwargs["db_constraint"] = False
325325

326326
if kwargs.get("null"):
327327
kwargs.setdefault("blank", True)
@@ -356,17 +356,21 @@ def __init__(self, verbose_name, to, *args, **kwargs):
356356

357357

358358
class GenericForeignKey(ct_fields.GenericForeignKey):
359-
def __init__(self, ct_field='content_type', fk_field='object_id', for_concrete_model=True):
360-
super().__init__(ct_field=ct_field, fk_field=fk_field, for_concrete_model=for_concrete_model)
359+
def __init__(
360+
self, ct_field="content_type", fk_field="object_id", for_concrete_model=True
361+
):
362+
super().__init__(
363+
ct_field=ct_field, fk_field=fk_field, for_concrete_model=for_concrete_model
364+
)
361365

362366

363367
class GenericRelation(ct_fields.GenericRelation):
364368
def __init__(
365369
self,
366370
verbose_name,
367371
to,
368-
object_id_field='object_id',
369-
content_type_field='content_type',
372+
object_id_field="object_id",
373+
content_type_field="content_type",
370374
for_concrete_model=True,
371375
related_query_name=None,
372376
limit_choices_to=None,

0 commit comments

Comments
 (0)