예제 #1
0
    def test_q_serializer_10(self):
        "Value is a model instance"
        self.login()
        self._create_contacts()

        q = Q(position=self.baker)
        self._assertQIsOK(q, [self.marianne])

        qsr = QSerializer()
        str_q = qsr.dumps(q)
        self._assertQEqual(FakeContact, q, qsr.loads(str_q))
예제 #2
0
    def test_q_serializer_11(self):
        "__in=[...] + model instance"
        self.login()
        self._create_contacts()

        q = Q(position__in=[self.boxer, self.fighter])
        self._assertQIsOK(q, [self.richard, self.adrian])

        qsr = QSerializer()
        str_q = qsr.dumps(q)
        self._assertQEqual(FakeContact, q, qsr.loads(str_q))
예제 #3
0
def _build_extrafilter(arguments, extra_filter=None):
    json_q_filter = arguments.get('q_filter')
    q_filter = Q()
    serializer = QSerializer()

    # TODO: better validation of q_filter ? (corresponding EntityCell allowed + searchable ?)
    #  - limit the max depth of sub-fields chain ?
    #  - do no allow all fields ?
    if json_q_filter:
        try:
            q_filter = serializer.loads(json_q_filter)
        except:
            try:
                q_filter = get_q_from_dict(
                    _clean_value(json_q_filter, json_load, {}))
            except:
                raise
            else:
                warnings.warn(
                    'Old format for "q_filter" is deprecated is used : {}'.
                    format(json_q_filter), DeprecationWarning)

    return (serializer.dumps(q_filter),
            q_filter if extra_filter is None else q_filter & extra_filter)