Поле без базы данных в модели Django
Возможно ли иметь поле в модели Django, которое не сохраняется в базе данных.
Например:
class Book(models.Model):
title = models.CharField(max_length=75)
description models.CharField(max_length=255, blank=True)
pages = models.IntegerField()
none_db_field = ????
Тогда я мог бы сделать
book = Book.objects.get(pk=1)
book.none_db_field = 'some text...'
print book.none_db_field
Спасибо
Ответы
Ответ 1
Пока вы не хотите, чтобы свойство сохранялось, я не понимаю, почему вы не можете создать свойство, как вы описали. Я действительно делаю то же самое на некоторых моделях, чтобы определить, какие из них доступны для редактирования.
class Email(EntryObj):
ts = models.DateTimeField(auto_now_add=True)
body = models.TextField(blank=True)
user = models.ForeignKey(User, blank=True, null=True)
editable = False
...
class Note(EntryObj):
ts = models.DateTimeField(auto_now_add=True)
note = models.TextField(blank=True)
user = models.ForeignKey(User, blank=True, null=True)
editable = True
Ответ 2
Создание свойства на модели сделает это, но вы не сможете запросить его.
Ответ 3
Чтобы сделать его переменной экземпляра (чтобы каждый экземпляр получал свою собственную копию), вы захотите сделать это
class Book(models.Model):
title = models.CharField(max_length=75)
#etc
def __init__(self, *args, **kwargs):
super(Foo, self).__init__(*args, **kwargs)
self.editable = False
Каждая книга теперь имеет редактируемый файл, который не будет сохранен в базе данных.