예제 #1
0
    def test_if_false_default_None(self):
        Alphabet.objects.create(a=1)

        result = list(
            Alphabet.objects.annotate(conditional=If(Q(a=2), Value(1))).filter(
                conditional__isnull=True).values_list("conditional",
                                                      flat=True))
        assert result == [None]
예제 #2
0
    def test_if_with_string_values(self):
        Alphabet.objects.create(a=1, d='Lentils')
        Alphabet.objects.create(a=2, d='Cabbage')
        Alphabet.objects.create(a=3, d='Rice')

        result = list(Alphabet.objects.annotate(
            conditional=If(Q(a=2), Upper('d'), Lower('d')),
        ).order_by('id').values_list('conditional', flat=True))
        assert result == ['lentils', 'CABBAGE', 'rice']
예제 #3
0
    def test_if_with_Q(self):
        Alphabet.objects.create(a=12, b=17)
        Alphabet.objects.create(a=13, b=17)
        Alphabet.objects.create(a=14, b=17)

        result = list(Alphabet.objects.annotate(
            conditional=If(Q(a__lte=13), 'a', 'b'),
        ).order_by('id').values_list('conditional', flat=True))
        assert result == [12, 13, 17]
예제 #4
0
    def test_if_basic(self):
        Alphabet.objects.create(d='String')
        Alphabet.objects.create(d='')
        Alphabet.objects.create(d='String')
        Alphabet.objects.create(d='')

        results = list(Alphabet.objects.annotate(
            has_d=If(Length('d'), Value(True), Value(False)),
        ).order_by('id').values_list('has_d', flat=True))
        assert results == [True, False, True, False]
예제 #5
0
    def test_if_with_string_values(self):
        Alphabet.objects.create(a=1, d="Lentils")
        Alphabet.objects.create(a=2, d="Cabbage")
        Alphabet.objects.create(a=3, d="Rice")

        result = list(
            Alphabet.objects.annotate(conditional=If(Q(
                a=2), Upper("d"), Lower("d"))).order_by("id").values_list(
                    "conditional", flat=True))
        assert result == ["lentils", "CABBAGE", "rice"]
예제 #6
0
    def test_if_with_Q(self):
        Alphabet.objects.create(a=12, b=17)
        Alphabet.objects.create(a=13, b=17)
        Alphabet.objects.create(a=14, b=17)

        result = list(
            Alphabet.objects.annotate(conditional=If(Q(
                a__lte=13), "a", "b")).order_by("id").values_list(
                    "conditional", flat=True))
        assert result == [12, 13, 17]
예제 #7
0
    def test_if_field_lookups_work(self):
        Alphabet.objects.create(a=1, d='Lentils')
        Alphabet.objects.create(a=2, d='Cabbage')
        Alphabet.objects.create(a=3, d='Rice')

        result = list(Alphabet.objects.annotate(
            conditional=If(Q(a__gte=2), Upper('d'), Value('')),
        ).filter(
            conditional__startswith='C',
        ).order_by('id').values_list('conditional', flat=True))
        assert result == ['CABBAGE']
예제 #8
0
    def test_if_basic(self):
        Alphabet.objects.create(d="String")
        Alphabet.objects.create(d="")
        Alphabet.objects.create(d="String")
        Alphabet.objects.create(d="")

        results = list(
            Alphabet.objects.annotate(has_d=If(Length("d"), Value(
                True), Value(False))).order_by("id").values_list("has_d",
                                                                 flat=True))
        assert results == [True, False, True, False]
예제 #9
0
    def test_if_field_lookups_work(self):
        Alphabet.objects.create(a=1, d="Lentils")
        Alphabet.objects.create(a=2, d="Cabbage")
        Alphabet.objects.create(a=3, d="Rice")

        result = list(
            Alphabet.objects.annotate(conditional=If(Q(
                a__gte=2), Upper("d"), Value(""))).filter(
                    conditional__startswith="C").order_by("id").values_list(
                        "conditional", flat=True))
        assert result == ["CABBAGE"]
예제 #10
0
    def test_if_output_field(self):
        Alphabet.objects.create(a=0, d="Aaa")
        Alphabet.objects.create(a=1, d="Bb")
        Alphabet.objects.create(a=2, d="Ccc")

        results = list(
            Alphabet.objects.annotate(d_length=If(
                "a",
                Length("d"),
                Value(0),
                output_field=IntegerField(),
            )).order_by("id").values_list("d_length", flat=True))
        assert results == [0, 2, 3]