Ensure that DBRef items in ListFields are dereferenced.
(self)
| 16 | cls.db.drop_database("mongoenginetest") |
| 17 | |
| 18 | def test_list_item_dereference(self): |
| 19 | """Ensure that DBRef items in ListFields are dereferenced.""" |
| 20 | |
| 21 | class User(Document): |
| 22 | name = StringField() |
| 23 | |
| 24 | class Group(Document): |
| 25 | members = ListField(ReferenceField(User)) |
| 26 | |
| 27 | User.drop_collection() |
| 28 | Group.drop_collection() |
| 29 | |
| 30 | for i in range(1, 51): |
| 31 | user = User(name="user %s" % i) |
| 32 | user.save() |
| 33 | |
| 34 | group = Group(members=User.objects) |
| 35 | group.save() |
| 36 | |
| 37 | group = Group(members=User.objects) |
| 38 | group.save() |
| 39 | |
| 40 | with query_counter() as q: |
| 41 | assert q == 0 |
| 42 | |
| 43 | group_obj = Group.objects.first() |
| 44 | assert q == 1 |
| 45 | |
| 46 | len(group_obj._data["members"]) |
| 47 | assert q == 1 |
| 48 | |
| 49 | len(group_obj.members) |
| 50 | assert q == 2 |
| 51 | |
| 52 | _ = [m for m in group_obj.members] |
| 53 | assert q == 2 |
| 54 | |
| 55 | # Document select_related |
| 56 | with query_counter() as q: |
| 57 | assert q == 0 |
| 58 | |
| 59 | group_obj = Group.objects.first().select_related() |
| 60 | assert q == 2 |
| 61 | _ = [m for m in group_obj.members] |
| 62 | assert q == 2 |
| 63 | |
| 64 | # Queryset select_related |
| 65 | with query_counter() as q: |
| 66 | assert q == 0 |
| 67 | group_objs = Group.objects.select_related() |
| 68 | assert q == 2 |
| 69 | for group_obj in group_objs: |
| 70 | _ = [m for m in group_obj.members] |
| 71 | assert q == 2 |
| 72 | |
| 73 | User.drop_collection() |
| 74 | Group.drop_collection() |
| 75 |
nothing calls this directly
no test coverage detected