File tree Expand file tree Collapse file tree 2 files changed +30
-1
lines changed Expand file tree Collapse file tree 2 files changed +30
-1
lines changed Original file line number Diff line number Diff line change 1
- from django import forms
1
+ from django import VERSION , forms
2
2
from django .conf import settings
3
+ from django .db import models
3
4
4
5
from extra_settings .models import Setting
5
6
from extra_settings .utils import enforce_uppercase_setting
6
7
7
8
9
+ def urlfields_assume_scheme (field , ** kwargs ):
10
+ """
11
+ ModelForm.Meta.formfield_callback function to set assume_scheme for scheme-less
12
+ domains in URLFields. Only since Django version 5.0.
13
+ """
14
+ if isinstance (field , models .URLField ) and VERSION >= (5 , 0 ):
15
+ kwargs ["assume_scheme" ] = "https"
16
+
17
+ return field .formfield (** kwargs )
18
+
19
+
8
20
class SettingForm (forms .ModelForm ):
9
21
class Meta :
10
22
model = Setting
11
23
fields = "__all__"
24
+ formfield_callback = urlfields_assume_scheme
12
25
13
26
def __init__ (self , * args , ** kwargs ):
14
27
super ().__init__ (* args , ** kwargs )
Original file line number Diff line number Diff line change
1
+ from django import VERSION
1
2
from django .test import TestCase
2
3
3
4
from extra_settings .forms import SettingForm
@@ -34,3 +35,18 @@ def test_form_with_optional_data(self):
34
35
}
35
36
form_obj = SettingForm (data = form_data )
36
37
self .assertTrue (form_obj .is_valid ())
38
+
39
+ def test_form_assume_scheme (self ):
40
+ form_data = {
41
+ "name" : "PACKAGE_NAME" ,
42
+ "value_type" : Setting .TYPE_URL ,
43
+ "description" : "A URL field" ,
44
+ "value_url" : "example.com" ,
45
+ }
46
+ form_obj = SettingForm (data = form_data )
47
+ self .assertTrue (form_obj .is_valid ())
48
+
49
+ if VERSION >= (5 , 0 ):
50
+ self .assertEqual (form_obj .cleaned_data ["value_url" ], "https://example.com" )
51
+ else :
52
+ self .assertEqual (form_obj .cleaned_data ["value_url" ], "http://example.com" )
You can’t perform that action at this time.
0 commit comments