Поле без базы данных в модели Django - PullRequest
17 голосов
/ 12 февраля 2010

Возможно ли иметь поле в модели 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

Спасибо

Ответы [ 3 ]

19 голосов
/ 12 февраля 2010

Пока вы не хотите, чтобы свойство сохранялось, я не понимаю, почему вы не можете создать свойство, как описано выше. Я фактически делаю то же самое на определенных моделях, чтобы определить, какие из них доступны для редактирования.

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
5 голосов
/ 12 февраля 2010

Создание свойства в модели сделает это, но вы не сможете запросить его.

1 голос
/ 22 января 2019

Чтобы сделать его переменной экземпляра (чтобы каждый экземпляр получал свою собственную копию), вам нужно сделать это

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

Каждая книга теперь имеет редактируемый файл, который не будет сохранен в базе данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...