Projet

Général

Profil

0001-misc-add-backoffice-fields-support-to-filter_by-4617.patch

Frédéric Péters, 28 août 2020 11:48

Télécharger (3,1 ko)

Voir les différences:

Subject: [PATCH] misc: add backoffice fields support to |filter_by (#46173)

 tests/test_formdata.py | 24 +++++++++++++++++++++---
 wcs/variables.py       |  2 +-
 2 files changed, 22 insertions(+), 4 deletions(-)
tests/test_formdata.py
935 935

  
936 936

  
937 937
def test_lazy_formdata_queryset_filter(pub, variable_test_data):
938
    wf = Workflow.get_default_workflow()
939
    wf.id = None
940
    wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf)
941
    wf.backoffice_fields_formdef.fields = [
942
        fields.StringField(id='bo1', label='1st backoffice field',
943
            type='string', varname='backoffice_blah'),
944
    ]
945
    wf.store()
946

  
938 947
    lazy_formdata = variable_test_data
939 948
    formdef = lazy_formdata._formdef
949
    formdef.workflow = wf
940 950
    formdef.store()
941 951
    data_class = lazy_formdata._formdef.data_class()
942 952
    for i in range(6):
943 953
        formdata = data_class()
944
        formdata.data = {'0': 'bar'}
954
        formdata.data = {'0': 'bar', 'bo1': 'plop1'}
945 955
        formdata.just_created()
946 956
        formdata.store()
947 957
    for i in range(4):
948 958
        formdata = data_class()
949
        formdata.data = {'0': 'foo'}
959
        formdata.data = {'0': 'foo', 'bo1': 'plop2'}
950 960
        formdata.just_created()
951 961
        formdata.jump_status('finished')
952 962
        formdata.store()
953 963

  
954 964
    formdata = data_class()
955
    formdata.data = {'0': 'bar'}
965
    formdata.data = {'0': 'bar', 'bo1': 'plop1'}
956 966
    formdata.status = 'draft'
957 967
    formdata.store()
958 968

  
......
969 979
    queryset = lazy_formdata.objects.filter_by('foo_foo').apply_filter_value('X')
970 980
    assert queryset.count == 0
971 981

  
982
    # filter function on backoffice field
983
    queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('plop1')
984
    assert queryset.count == 6
985
    queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('plop2')
986
    assert queryset.count == 4
987
    queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('X')
988
    assert queryset.count == 0
989

  
972 990
    # filter using attribute name
973 991
    queryset = lazy_formdata.objects.filter_by_foo_foo().apply_filter_value('bar')
974 992
    assert queryset.count == 7
wcs/variables.py
123 123

  
124 124
    def apply_filter_value(self, value):
125 125
        assert self.pending_attr
126
        for field in self._formdef.fields:
126
        for field in self._formdef.get_all_fields():
127 127
            if getattr(field, 'varname', None) == self.pending_attr:
128 128
                from wcs import sql
129 129
                criteria = Equal(sql.get_field_id(field), value)
130
-