Beispiel #1
0
 def test_remove_works_in_ansi_mode(self):
     CharSetModel.objects.create(field={"bold"})
     CharSetModel.objects.update(field=SetF("field").remove("big"))
     CharSetModel.objects.update(field=SetF("field").remove("bold"))
     CharSetModel.objects.update(field=SetF("field").remove("bad"))
     model = CharSetModel.objects.get()
     assert model.field == set()
Beispiel #2
0
 def test_remove_from_multiple_objects(self):
     CharSetModel.objects.create(field={"mouse", "chair"})
     CharSetModel.objects.create(field={"keyboard", "chair"})
     CharSetModel.objects.update(field=SetF("field").remove("chair"))
     first, second = tuple(CharSetModel.objects.all())
     assert first.field == {"mouse"}
     assert second.field == {"keyboard"}
Beispiel #3
0
 def test_add_to_multiple_objects(self):
     CharSetModel.objects.create(field={"mouse"})
     CharSetModel.objects.create(field={"keyboard"})
     CharSetModel.objects.update(field=SetF("field").add("screen"))
     first, second = tuple(CharSetModel.objects.all())
     assert first.field == {"mouse", "screen"}
     assert second.field == {"keyboard", "screen"}
Beispiel #4
0
    def test_works_with_two_fields(self):
        CharSetModel.objects.create(
            field={"snickers", "lion"}, field2={"apple", "orange"}
        )

        # Concurrent add
        CharSetModel.objects.update(
            field=SetF("field").add("mars"), field2=SetF("field2").add("banana")
        )
        model = CharSetModel.objects.get()
        assert model.field == {"snickers", "lion", "mars"}
        assert model.field2 == {"apple", "orange", "banana"}

        # Concurrent add and remove
        CharSetModel.objects.update(
            field=SetF("field").add("reeses"), field2=SetF("field2").remove("banana")
        )
        model = CharSetModel.objects.get()
        assert model.field == {"snickers", "lion", "mars", "reeses"}
        assert model.field2 == {"apple", "orange"}

        # Swap
        CharSetModel.objects.update(
            field=SetF("field").remove("lion"), field2=SetF("field2").remove("apple")
        )
        model = CharSetModel.objects.get()
        assert model.field == {"snickers", "mars", "reeses"}
        assert model.field2 == {"orange"}
Beispiel #5
0
 def test_add_exists(self):
     CharSetModel.objects.create(field={"nice"})
     CharSetModel.objects.update(field=SetF("field").add("nice"))
     model = CharSetModel.objects.get()
     assert model.field == {"nice"}
Beispiel #6
0
 def test_remove_not_exists(self):
     CharSetModel.objects.create(field={"nice"})
     CharSetModel.objects.update(field=SetF("field").remove("naughty"))
     model = CharSetModel.objects.get()
     assert model.field == {"nice"}
Beispiel #7
0
 def test_remove_expression(self):
     CharSetModel.objects.create(field={"a"})
     CharSetModel.objects.update(field=SetF("field").remove(Value("a")))
     model = CharSetModel.objects.get()
     assert model.field == set()
Beispiel #8
0
 def test_remove_from_none(self):
     CharSetModel.objects.create(field=set())
     CharSetModel.objects.update(field=SetF("field").remove("jam"))
     model = CharSetModel.objects.get()
     assert model.field == set()
Beispiel #9
0
 def test_remove_last(self):
     CharSetModel.objects.create()
     CharSetModel.objects.update(field="a,b,c")
     CharSetModel.objects.update(field=SetF("field").remove("c"))
     model = CharSetModel.objects.get()
     assert model.field == {"a", "b"}
Beispiel #10
0
 def test_remove_one(self):
     CharSetModel.objects.create(field={"dopey", "knifey"})
     CharSetModel.objects.update(field=SetF("field").remove("knifey"))
     model = CharSetModel.objects.get()
     assert model.field == {"dopey"}
Beispiel #11
0
 def test_remove_only_one(self):
     CharSetModel.objects.create(field={"pants"})
     CharSetModel.objects.update(field=SetF("field").remove("pants"))
     model = CharSetModel.objects.get()
     assert model.field == set()
Beispiel #12
0
 def test_add_expression(self):
     CharSetModel.objects.create(field={"a"})
     CharSetModel.objects.update(field=SetF("field").add(Value("b")))
     model = CharSetModel.objects.get()
     assert model.field == {"a", "b"}
Beispiel #13
0
 def test_add_assignment(self):
     model = CharSetModel.objects.create(field={"red"})
     model.field = SetF("field").add("blue")
     model.save()
     model = CharSetModel.objects.get()
     assert model.field == {"red", "blue"}
Beispiel #14
0
    def test_SetCharField(self):
        """
        https://django-mysql.readthedocs.io/en/latest/model_fields/set_fields.html?highlight=SetCharField
        """
        # 修改表字段类型
        with connection.cursor() as cursor:
            cursor.execute("""
                ALTER TABLE film
                MODIFY special_features 
                SET('Trailers','Commentaries','Deleted Scenes','Behind the Scenes') 
                DEFAULT NULL
                COLLATE utf8mb4_general_ci; 
            """)
            cursor.execute("SHOW CREATE TABLE film")
            result = [result for result in dictfetchall(cursor)][0]
            print(result)

        # 创建测试数据
        language = Language.objects.create(name="test")
        Film.objects.create(
            film_id=1,
            title="ACADEMY DINOSAUR",
            description=
            "A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies",
            release_year=2006,
            language=language,
            rental_duration=6,
            rental_rate="0.99",
            length=86,
            replacement_cost="20.99",
            rating="PG",
            special_features={
                "Deleted Scenes", "Behind the Scenes", "Trailers"
            },  # SET
        )

        # 测试使用to_dict()是否能正常序列化
        print(Film.objects.all()[0].to_dict())
        # 测试过滤统计
        print(f"len:", Film.objects.filter(special_features__len=3).count())
        # 测试过滤查询
        print(
            Film.objects.filter(
                special_features__contains="Behind the Scenes"))

        print(
            Film.objects.filter(
                Q(special_features__contains="deleted scenes")
                & Q(special_features__contains="trailers")))
        # 测试添加/删除元素
        Film.objects.filter(special_features__contains="trailers").update(
            special_features=SetF("special_features").add("Commentaries"))
        print(Film.objects.all()[0].special_features)

        Film.objects.update(special_features=SetF("special_features").remove(
            "Behind the Scenes"))
        print("remove(Behind the Scenes):",
              Film.objects.all()[0].special_features)

        film = Film.objects.all()[0]
        film.special_features = SetF("special_features").remove("Trailers")
        film.save()
        print("remove(Trailers):", Film.objects.all()[0].special_features)

        film.special_features = SetF("special_features").add("Trailers")
        film.save()
        print("add(Trailers):", Film.objects.all()[0].special_features)
Beispiel #15
0
 def test_remove_assignment(self):
     model = IntSetModel.objects.create(field={24, 89})
     model.field = SetF("field").remove(89)
     model.save()
     model = IntSetModel.objects.get()
     assert model.field == {24}
Beispiel #16
0
 def test_add_to_some(self):
     CharSetModel.objects.create(field={"big", "blue"})
     CharSetModel.objects.update(field=SetF("field").add("round"))
     model = CharSetModel.objects.get()
     assert model.field == {"big", "blue", "round"}
Beispiel #17
0
 def test_add_to_none(self):
     CharSetModel.objects.create(field=set())
     CharSetModel.objects.update(field=SetF("field").add("first"))
     model = CharSetModel.objects.get()
     assert model.field == {"first"}
 def test_remove_middle(self):
     CharSetModel.objects.create()
     CharSetModel.objects.update(field="a,b,c")
     CharSetModel.objects.update(field=SetF('field').remove('b'))
     model = CharSetModel.objects.get()
     assert model.field == {"a", "c"}
 def test_add_assignment(self):
     model = CharSetModel.objects.create(field={"red"})
     model.field = SetF('field').add('blue')
     model.save()
     model = CharSetModel.objects.get()
     assert model.field == {'red', 'blue'}
 def test_add_to_one(self):
     CharSetModel.objects.create(field={"big"})
     CharSetModel.objects.update(field=SetF('field').add('bad'))
     model = CharSetModel.objects.get()
     assert model.field == {"big", "bad"}
Beispiel #21
0
 def test_add_works_in_ansi_mode(self):
     CharSetModel.objects.create()
     CharSetModel.objects.update(field=SetF("field").add("big"))
     CharSetModel.objects.update(field=SetF("field").add("bad"))
     model = CharSetModel.objects.get()
     assert model.field == {"big", "bad"}
Beispiel #22
0
 def test_cannot_instantiate(self):
     with pytest.raises(ValueError):
         SetF('field').add("something")