Сохранить файл в формате CharFiled со значением, как я могу получить другое значение при его чтении?

#django #django-models

#django #django-модели

Вопрос:

Файл CharFiled сохранен со значением, но я хочу внести некоторые изменения в сохраненное значение при его чтении, но значение в базе данных не меняется. Как мне следует поступить? мой код выглядит следующим образом:

 class TFile(models.Model):
    lang = models.CharField(max_length=100, choices=LANGUAGE.choices())
    domain = models.ForeignKey(TDomain, null=True, verbose_name="领域", related_name="domain", on_delete=models.SET_NULL)

    type = models.CharField(max_length=100, choices=FILETYPE.choices())
    host = models.CharField(max_length=100, null=True)
    path = PathFiled(max_length=1000)
  

например: я задаю path значение как «/ home / work / workspace», но я хочу прочитать его как «/ workspace», что мне следует делать, или какую функцию я должен переопределить в моем пользовательском поле пути.

Комментарии:

1. @property простой способ, но вы должны добавить больше деталей и показать код.

2. Я добавляю некоторые подробности, пожалуйста, просмотрите этот вопрос еще раз.

Ответ №1:

Как упоминал Bear в комментарии, допустим, у меня есть модель под названием Menu с двумя полями и свойством, которое я могу определить в классе для представления измененной версии значения db.

 class Menu(models.Model):

    identifier = models.CharField(verbose_name=_("identifier"), max_length=100)
    site = models.ForeignKey(Site, on_delete=models.PROTECT)


    def __str__(self):
        return self.identifier

    @property
    def root_id(self)
        # Do whatever modification you would like here... for example
        # below I prefix "root-" to an identifier
        return "root-"   self.identifier
  

Комментарии:

1. Я добавляю некоторые подробности, пожалуйста, просмотрите этот вопрос еще раз.

2. @XiaolinWu чего ты еще хочешь от ответа?

3. как упоминалось в примере, я хочу снова указать path как path, изменив его значение только при чтении.

4. путь, который вы можете использовать как obj.path и использовать новый атрибут в качестве свойства