Ik heb problemen met het volgende:
Ik gebruik Flask met Flask-WTF en nu moet ik bepaalde velden verplicht maken als een ander veld (niet) een bepaalde waarde heeft.
Ik heb dit werkend voor de velden in dezelfde class. Echter voor velden die niet in dezelfde class zitten maar worden geerfd vanuit een andere class via een FormField() + FormList() methode werkt het niet.
Ik zie twee problemen.
1) country_code is niet bekend in de ItemsForm() class, die velden moeten dus op de een of andere manier bij MainForm() moeten kunnen komen.
2) De RequiredIfNot() __call__ methode krijgt niet het juist form mee voor de velden in ItemsForm(). Waardoor het dus ook nooit tegen de juiste country_code waarde kan checken.
(De var COUNTRIES is gevuld)
...
Python 3.8.2
Flask 1.1.2
Flask-WTF 0.14.3
...
Ik heb van alles geprobeerd in de RequiredIf() functie maar ik zie niet hoe ik daar de juiste form object meekrijg.
Mainform.country_code="DE" opgeven geeft een error:
Ik gebruik Flask met Flask-WTF en nu moet ik bepaalde velden verplicht maken als een ander veld (niet) een bepaalde waarde heeft.
Ik heb dit werkend voor de velden in dezelfde class. Echter voor velden die niet in dezelfde class zitten maar worden geerfd vanuit een andere class via een FormField() + FormList() methode werkt het niet.
Ik zie twee problemen.
1) country_code is niet bekend in de ItemsForm() class, die velden moeten dus op de een of andere manier bij MainForm() moeten kunnen komen.
2) De RequiredIfNot() __call__ methode krijgt niet het juist form mee voor de velden in ItemsForm(). Waardoor het dus ook nooit tegen de juiste country_code waarde kan checken.
(De var COUNTRIES is gevuld)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| class RequiredIfNot(DataRequired): """Validator which makes a field required if another field is set and has a truthy value. Sources: - http://wtforms.simplecodes.com/docs/1.0.1/validators.html - http://stackoverflow.com/questions/8463209/how-to-make-a-field-conditionally-optional-in-wtforms - https://gist.github.com/devxoul/7638142#file-wtf_required_if-py """ field_flags = ('requiredif',) def __init__(self, message=None, *args, **kwargs): super(RequiredIfNot).__init__() self.message = message self.conditions = kwargs # field is requiring that name field in the form is data value in the form def __call__(self, form, field): for name, data in self.conditions.items(): other_field = form[name] if other_field is None: raise Exception("No field named {} in form".format(name)) if other_field.data != data and not field.data: DataRequired.__call__(self, form, field) Optional()(form, field) class ItemsForm(FlaskForm): item_description = StringField( 'Item description', [ RequiredIfNot(country_code="DE", message='Item description is required') ] ) class MainForm(FlaskForm): country_code = SelectField( 'Destination country', [ validators.Required() ], choices=COUNTRIES, default = "DE" ) number = StringField( 'Invoice number', [ RequiredIfNot(country_code="DE", message='Invoice number is required') ] ) items = FieldList( FormField(ItemsForm), min_entries=1 ) |
...
Python 3.8.2
Flask 1.1.2
Flask-WTF 0.14.3
...
Ik heb van alles geprobeerd in de RequiredIf() functie maar ik zie niet hoe ik daar de juiste form object meekrijg.
Mainform.country_code="DE" opgeven geeft een error:
...SyntaxError: keyword can't be an expression