Пример #1
0
    def test_in_with_queryset_as_arg(self):
        main = MiscModel()
        main.save()

        MiscModel(foreign=main, integer=1, text='a').save()
        MiscModel(foreign=main, integer=2, text='a').save()
        MiscModel(foreign=main, integer=3, text='b').save()
        MiscModel(foreign=main, integer=4, text='b').save()

        a_models = MiscModel.objects.filter(text='a')

        all_models = list(MiscModel.objects.all())

        db_results = MiscModel.objects.filter(miscmodel__in=a_models)
        mem_results = filter_by_q(all_models, Q(miscmodel__in=a_models))
        self.assertEqual(set(db_results), set(mem_results))
Пример #2
0
    def assert_q_executes_the_same_in_python_and_sql(self, model, q, expected_count=NOT_SET, raise_original_exceptions=False, lookup_adapter=None, raise_invalid_usage=True):
        all_objs = list(model.objects.all())

        try:
            qs = model.objects.filter(q)
            db_result = list(qs)
        except Exception as e:
            db_result = e

        try:
            mem_result = filter_by_q(all_objs, q, lookup_adapter=lookup_adapter)
        except InvalidLookupUsage as e:
            mem_result = e
            if raise_invalid_usage:
                raise
        except Exception as e:
            mem_result = e

        if isinstance(db_result, Exception) and isinstance(mem_result, Exception):
            return

        if raise_original_exceptions:
            if isinstance(db_result, Exception):
                raise db_result

            if isinstance(mem_result, Exception):
                raise mem_result

        if set(db_result) != set(mem_result):
            try:
                sql = str(qs.query)
            except:
                sql = ''

            raise DoesNotMatchDbExecution(
                q=q,
                db_result=db_result,
                py_result=mem_result,
                sql=sql
            )

        if expected_count != NOT_SET and expected_count != len(mem_result):
            raise Exception('Did not behave as expected.')