def setUp(self): for table in self.tables: table.create_table().run_sync() manager_1 = Manager(name="Guido") manager_1.save().run_sync() band_1 = Band( name="Pythonistas", manager=manager_1.id, popularity=1000 ) band_1.save().run_sync() manager_2 = Manager(name="Graydon") manager_2.save().run_sync() band_2 = Band(name="Rustaceans", manager=manager_2.id) band_2.save().run_sync() venue = Venue(name="Grand Central", capacity=1000) venue.save().run_sync() concert = Concert(band_1=band_1.id, band_2=band_2.id, venue=venue.id) concert.save().run_sync() ticket = Ticket(concert=concert, price=decimal.Decimal(50.0)) ticket.save().run_sync()
def test_get_related(self): """ Make sure you can get a related object from another object instance. """ manager = Manager(name="Guido") manager.save().run_sync() band = Band(name="Pythonistas", manager=manager.id, popularity=100) band.save().run_sync() _manager = band.get_related(Band.manager).run_sync() self.assertTrue(_manager.name == "Guido") # Test non-ForeignKey with self.assertRaises(ValueError): band.get_related(Band.name) # Make sure it also works using a string _manager = band.get_related("manager").run_sync() self.assertTrue(_manager.name == "Guido") # Test an invalid string with self.assertRaises(ValueError): band.get_related("abc123")
def test_save_specific_columns(self): """ Make sure that we can save a subset of columns. """ manager = Manager(name="Guido") manager.save().run_sync() band = Band(name="Pythonistas", popularity=1000, manager=manager) band.save().run_sync() self.assertEqual( Band.select().run_sync(), [{ "id": 1, "name": "Pythonistas", "manager": 1, "popularity": 1000, }], ) band.name = "Pythonistas 2" band.popularity = 2000 band.save(columns=[Band.name]).run_sync() # Only the name should update, and not the popularity: self.assertEqual( Band.select().run_sync(), [{ "id": 1, "name": "Pythonistas 2", "manager": 1, "popularity": 1000, }], ) ####################################################################### # Also test it using strings to identify columns band.name = "Pythonistas 3" band.popularity = 3000 band.save(columns=["popularity"]).run_sync() # Only the popularity should update, and not the name: self.assertEqual( Band.select().run_sync(), [{ "id": 1, "name": "Pythonistas 2", "manager": 1, "popularity": 3000, }], )