Example of migrating ReferenceField storage
(self)
| 227 | assert group.members[-1].name == "String!" |
| 228 | |
| 229 | def test_migrate_references(self): |
| 230 | """Example of migrating ReferenceField storage""" |
| 231 | |
| 232 | # Create some sample data |
| 233 | class User(Document): |
| 234 | name = StringField() |
| 235 | |
| 236 | class Group(Document): |
| 237 | author = ReferenceField(User, dbref=True) |
| 238 | members = ListField(ReferenceField(User, dbref=True)) |
| 239 | |
| 240 | User.drop_collection() |
| 241 | Group.drop_collection() |
| 242 | |
| 243 | user = User(name="Ross").save() |
| 244 | group = Group(author=user, members=[user]).save() |
| 245 | |
| 246 | raw_data = Group._get_collection().find_one() |
| 247 | assert isinstance(raw_data["author"], DBRef) |
| 248 | assert isinstance(raw_data["members"][0], DBRef) |
| 249 | group = Group.objects.first() |
| 250 | |
| 251 | assert group.author == user |
| 252 | assert group.members == [user] |
| 253 | |
| 254 | # Migrate the model definition |
| 255 | class Group(Document): |
| 256 | author = ReferenceField(User, dbref=False) |
| 257 | members = ListField(ReferenceField(User, dbref=False)) |
| 258 | |
| 259 | # Migrate the data |
| 260 | for g in Group.objects(): |
| 261 | # Explicitly mark as changed so resets |
| 262 | g._mark_as_changed("author") |
| 263 | g._mark_as_changed("members") |
| 264 | g.save() |
| 265 | |
| 266 | group = Group.objects.first() |
| 267 | assert group.author == user |
| 268 | assert group.members == [user] |
| 269 | |
| 270 | raw_data = Group._get_collection().find_one() |
| 271 | assert isinstance(raw_data["author"], ObjectId) |
| 272 | assert isinstance(raw_data["members"][0], ObjectId) |
| 273 | |
| 274 | def test_recursive_reference(self): |
| 275 | """Ensure that ReferenceFields can reference their own documents.""" |
nothing calls this directly
no test coverage detected