Skip to content

Commit 6273aec

Browse files
committed
重新调整了组件的目录结构,把CharInputField和CharInputWidget移到了单个文件。
1 parent 0e3d48a commit 6273aec

File tree

4 files changed

+169
-134
lines changed

4 files changed

+169
-134
lines changed

simplepro/components/fields/__init__.py

Lines changed: 2 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from .radio_field import RadioField
88
from .input_number_field import InputNumberField
99
from .input_password_field import PasswordInputField
10+
from .char_field import CharField
1011

1112

1213
class CheckboxFormField(forms.fields.CharField):
@@ -227,70 +228,6 @@ def formfield(self, **kwargs):
227228
return r
228229

229230

230-
class CharFormField(forms.fields.CharField):
231-
fields = ['input_type', 'max_length', 'min_length'
232-
, 'placeholder', 'clearable', 'show_password', 'disabled', 'size',
233-
'prefix_icon', 'suffix_icon', 'rows', 'autocomplete', 'readonly',
234-
'max_value', 'min_value', 'step', 'resize', 'autofocus', 'show_word_limit', 'slot', 'slot_text', 'style']
235-
236-
def __init__(self, *args, **kwargs):
237-
kwargs.update({
238-
'widget': CharInput(**kwargs)
239-
})
240-
for f in self.fields:
241-
if f in kwargs:
242-
kwargs.pop(f)
243-
super(CharFormField, self).__init__(*args, **kwargs)
244-
245-
246-
class CharField(models.CharField):
247-
248-
def __init__(self, input_type='text', placeholder=None, clearable=True, show_password=False,
249-
min_length=None, disabled=False, size=None, prefix_icon=None, suffix_icon=None, rows=None,
250-
autocomplete=None,
251-
readonly=None, max_value=None, min_value=None, step=None, resize=None, autofocus=False,
252-
show_word_limit=False,
253-
slot=None, slot_text='', style=None,
254-
*args, **kwargs):
255-
self.items = {
256-
'input_type': input_type,
257-
'max_length': kwargs.get('max_length'),
258-
'min_length': min_length,
259-
'placeholder': placeholder,
260-
'clearable': clearable,
261-
'show_password': show_password,
262-
'disabled': disabled,
263-
'size': size,
264-
'prefix_icon': prefix_icon,
265-
'suffix_icon': suffix_icon,
266-
'rows': rows,
267-
'autocomplete': autocomplete,
268-
'readonly': readonly,
269-
'max_value': max_value,
270-
'min_value': min_value,
271-
'step': step,
272-
'resize': resize,
273-
'autofocus': autofocus,
274-
'show_word_limit': show_word_limit,
275-
'slot': slot,
276-
'slot_text': slot_text,
277-
'style': style
278-
}
279-
280-
super(CharField, self).__init__(*args, **kwargs)
281-
282-
def formfield(self, **kwargs):
283-
defaults = {
284-
'form_class': CharFormField,
285-
}
286-
287-
defaults.update(kwargs)
288-
defaults.update(self.items)
289-
290-
r = super(CharField, self).formfield(**defaults)
291-
return r
292-
293-
294231
class AMapFormField(forms.fields.CharField):
295232
""" custom form field """
296233

@@ -626,7 +563,7 @@ def formfield(self, **kwargs):
626563
placeholder = self.placeholder
627564
if not placeholder:
628565
placeholder = self.verbose_name
629-
r.widget = CharInput(input_type='number', clearable=self.clearable, placeholder=placeholder)
566+
r.widget = CharInputWidget(input_type='number', clearable=self.clearable, placeholder=placeholder)
630567

631568
return r
632569

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# _*_ codign:utf8 _*_
2+
"""====================================
3+
@Author:Sadam·Sadik
4+
@Email:1903249375@qq.com
5+
@Date:2023/11/17
6+
@Software: PyCharm
7+
@disc:
8+
======================================="""
9+
from django import forms
10+
from django.db import models
11+
12+
from ..widgets import CharInputWidget
13+
14+
15+
class CharFormField(forms.fields.CharField):
16+
fields = ['input_type', 'max_length', 'min_length'
17+
, 'placeholder', 'clearable', 'show_password', 'disabled', 'size',
18+
'prefix_icon', 'suffix_icon', 'rows', 'autocomplete', 'readonly',
19+
'max_value', 'min_value', 'step', 'resize', 'autofocus', 'show_word_limit', 'slot', 'slot_text', 'style']
20+
21+
def __init__(self, *args, **kwargs):
22+
kwargs.update({
23+
'widget': CharInputWidget(**kwargs)
24+
})
25+
for f in self.fields:
26+
if f in kwargs:
27+
kwargs.pop(f)
28+
super(CharFormField, self).__init__(*args, **kwargs)
29+
30+
31+
class CharField(models.CharField):
32+
33+
def __init__(self, input_type='text', placeholder=None, clearable=True, show_password=False,
34+
min_length=None, disabled=False, size=None, prefix_icon=None, suffix_icon=None, rows=None,
35+
autocomplete=None,
36+
readonly=None, max_value=None, min_value=None, step=None,
37+
resize=None, autofocus=False,
38+
show_word_limit=False,
39+
slot=None, slot_text='', style=None,
40+
*args, **kwargs):
41+
self.items = {
42+
'input_type': input_type,
43+
'max_length': kwargs.get('max_length'),
44+
'min_length': min_length,
45+
'placeholder': placeholder,
46+
'clearable': clearable,
47+
'show_password': show_password,
48+
'disabled': disabled,
49+
'size': size,
50+
'prefix_icon': prefix_icon,
51+
'suffix_icon': suffix_icon,
52+
'rows': rows,
53+
'autocomplete': autocomplete,
54+
'readonly': readonly,
55+
'max_value': max_value,
56+
'min_value': min_value,
57+
'step': step,
58+
'resize': resize,
59+
'autofocus': autofocus,
60+
'show_word_limit': show_word_limit,
61+
'slot': slot,
62+
'slot_text': slot_text,
63+
'style': style
64+
}
65+
66+
super(CharField, self).__init__(*args, **kwargs)
67+
68+
def formfield(self, **kwargs):
69+
defaults = {
70+
'form_class': CharFormField,
71+
}
72+
73+
defaults.update(kwargs)
74+
defaults.update(self.items)
75+
76+
r = super(CharField, self).formfield(**defaults)
77+
return r

simplepro/components/widgets/__init__.py

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from .input import Input, trim_name
2121
from .input_password import PasswordInputWidget
2222
from .input_number import NumberInputWidget
23+
from .input_char import CharInputWidget
2324

2425

2526
class RadioInput(forms.IntegerField, Input):
@@ -239,75 +240,6 @@ def __init__(self, *args, **kwargs):
239240
super(DateTimeInput, self).__init__(*args, **kwargs)
240241

241242

242-
class CharInput(forms.CharField, Input):
243-
"""
244-
文本输入框
245-
"""
246-
247-
class Media:
248-
pass
249-
250-
def __init__(self, input_type='text', placeholder=None, clearable=True, show_password=False,
251-
min_length=None, disabled=False, size=None, prefix_icon=None, suffix_icon=None, rows=None,
252-
autocomplete=None,
253-
readonly=None, max_value=None, min_value=None, step=None, resize=None, autofocus=False,
254-
show_word_limit=False, slot=None, slot_text='', style=None, *args, **kwargs):
255-
super(CharInput, self).__init__(*args)
256-
self.items = {
257-
'type': input_type,
258-
'placeholder': placeholder,
259-
':clearable': clearable,
260-
':show-password': show_password,
261-
'disabled': disabled,
262-
'size': size,
263-
'prefix-icon': prefix_icon,
264-
'suffix-icon': suffix_icon,
265-
'rows': rows,
266-
'autocomplete': autocomplete,
267-
'readonly': readonly,
268-
'maxlength': kwargs.get('max_length'),
269-
'minlength': min_length,
270-
'max': max_value,
271-
'min': min_value,
272-
'step': step,
273-
'resize': resize,
274-
'autofocus': autofocus,
275-
':show-word-limit': show_word_limit,
276-
277-
}
278-
self.slot = slot
279-
self.slot_text = slot_text
280-
self.style = style
281-
282-
def build_attrs(self):
283-
attrs = ""
284-
for f in self.items:
285-
val = self.items.get(f)
286-
if f == 'disabled' and not val:
287-
continue
288-
if val is not None:
289-
if isinstance(val, bool):
290-
val = str(val).lower()
291-
attrs += '\t{}=\"{}\"'.format(f, val)
292-
293-
return attrs
294-
295-
def render(self, name, value, attrs=None, renderer=None):
296-
if value is None:
297-
value = ''
298-
raw_name = name
299-
name = trim_name(name)
300-
301-
return mark_safe(render_to_string('admin/components/char.html', {
302-
'value': conditional_escape(force_text(value)),
303-
'name': name,
304-
'raw_name': raw_name,
305-
'attrs': self.build_attrs(),
306-
'slot': self.slot,
307-
'slot_text': self.slot_text,
308-
'style': self.style
309-
}))
310-
311243

312244

313245

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# _*_ codign:utf8 _*_
2+
"""====================================
3+
@Author:Sadam·Sadik
4+
@Email:1903249375@qq.com
5+
@Date:2023/11/17
6+
@Software: PyCharm
7+
@disc:
8+
======================================="""
9+
from django import forms
10+
from django.template.loader import render_to_string
11+
from django.utils.html import conditional_escape
12+
from django.utils.safestring import mark_safe
13+
14+
from .input import Input, trim_name
15+
16+
try:
17+
from django.utils.encoding import force_text
18+
except:
19+
from django.utils.encoding import force_str as force_text
20+
21+
22+
class CharInputWidget(forms.CharField, Input):
23+
"""
24+
文本输入框
25+
"""
26+
27+
class Media:
28+
pass
29+
30+
def __init__(self, input_type='text', placeholder=None, clearable=True, show_password=False,
31+
min_length=None, disabled=False, size=None, prefix_icon=None, suffix_icon=None, rows=None,
32+
autocomplete=None,
33+
readonly=None, max_value=None, min_value=None, step=None, resize=None, autofocus=False,
34+
show_word_limit=False, slot=None, slot_text='', style=None, *args, **kwargs):
35+
super(CharInputWidget, self).__init__(*args)
36+
self.items = {
37+
'type': input_type,
38+
'placeholder': placeholder,
39+
':clearable': clearable,
40+
':show-password': show_password,
41+
'disabled': disabled,
42+
'size': size,
43+
'prefix-icon': prefix_icon,
44+
'suffix-icon': suffix_icon,
45+
'rows': rows,
46+
'autocomplete': autocomplete,
47+
'readonly': readonly,
48+
'maxlength': kwargs.get('max_length'),
49+
'minlength': min_length,
50+
'max': max_value,
51+
'min': min_value,
52+
'step': step,
53+
'resize': resize,
54+
'autofocus': autofocus,
55+
':show-word-limit': show_word_limit,
56+
57+
}
58+
self.slot = slot
59+
self.slot_text = slot_text
60+
self.style = style
61+
62+
def build_attrs(self):
63+
attrs = ""
64+
for f in self.items:
65+
val = self.items.get(f)
66+
if f == 'disabled' and not val:
67+
continue
68+
if val is not None:
69+
if isinstance(val, bool):
70+
val = str(val).lower()
71+
attrs += '\t{}=\"{}\"'.format(f, val)
72+
73+
return attrs
74+
75+
def render(self, name, value, attrs=None, renderer=None):
76+
if value is None:
77+
value = ''
78+
raw_name = name
79+
name = trim_name(name)
80+
81+
return mark_safe(render_to_string('admin/components/char.html', {
82+
'value': conditional_escape(force_text(value)),
83+
'name': name,
84+
'raw_name': raw_name,
85+
'attrs': self.build_attrs(),
86+
'slot': self.slot,
87+
'slot_text': self.slot_text,
88+
'style': self.style
89+
}))

0 commit comments

Comments
 (0)