Предположим, у меня есть эта модель (не реальный код):
class Message(models.Model):
content = models.CharField(...)
mentions = models.ManyToManyField(User)
содержимое может быть, например:
Скажите привет @Adam и @ Bernard
Во время модели сообщения save () из текста извлекаются «Адам» и «Бернард», и к ним добавляются соответствующие экземпляры пользователей, так что
>>> m = Message.objects.create(content="Say hi to @Adam and @Bernard")
>>> m.mentions.all()
>>> [User: Adam, User: Bernard]
Теперь, что касаетсямоя проблема:
Как мне справиться с тем, как Бернард сменил пол и переименовал себя в Бернарду?Мне бы очень хотелось, чтобы содержимое читалось Say hi to @Adam and @Bernarda
.
По сути, я попробовал стратегию замены имен на идентификаторы при сохранении (Say hi to @Adam and @Bernard
затем становится Say hi to @1 and @2
, то есть их User.pk's).Это отлично работает при сохранении, и ОК при чтении.
Выполнение этой замены в методе save () модели работает нормально, но операции чтения и поиска являются серьезной проблемой.Я не могу найти простой способ убедиться, что то, что хранится в базе данных (т. Е. Say hi to @1 and @2
), «волшебным образом» становится Say hi to @Adam and @Bernard
всякий раз, когда к нему обращаются (например, через .filter () и связанные с ним операции) или когда его экземпляр являетсяоценил.
Я не уверен, что я на правильном пути здесь;любые указания или идеи сделать это по-другому, очень приветствуются!