Обновление значения объекта модели django не обновляет значение связанного внешнего ключа модели
У меня есть 2 модели, House и Room, где Room имеет внешний ключ к House:
class House(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=50)
class Room(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=50)
color = models.CharField(max_length=50)
house = models.ForeignKey(House, on_delete=models.CASCADE, related_name='rooms')
Когда я запускаю следующий тест, по какой-то причине цвета не совпадают, хотя идентификаторы совпадают. Кто-нибудь может помочь выяснить причину?
def test_color_change(self):
h = House(name='new house')
h.save()
r = h.rooms.create(
name='living room',
color='blue'
)
r2 = h.rooms.get(name='living room')
r2.color = 'green'
r2.save()
self.assertEqual(r.id, r2.id)
self.assertEqual(r2.color, r.color)
Я просмотрел документацию django для RelatedManager, но так и не смог разобраться. Я ожидал, что r и r2 будут указывать на один и тот же объект, но, видимо, это не так.
"r" содержит экземпляр Python Room
, созданный с помощью извлечения данных из DB во время запроса, это не какая-то ссылка на строку базы данных. Когда вы обновляете этот ряд, меняя цвет на "зеленый", переменная "r" не обновляется
.
Ваш тест должен выглядеть следующим образом:
def test_color_change(self):
h = House(name='new house')
h.save()
r = h.rooms.create(
name='living room',
color='blue'
)
r.color = 'green'
r.save()
r2 = h.rooms.get(name='living room')
self.assertEqual(r.id, r2.id)
self.assertEqual(r2.color, r.color)
Однако я не понимаю, чего должен достичь этот тест, поскольку вы фактически тестируете ORM