Обновление значения объекта модели 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

Вернуться на верх