Django模型中的非数据库字段

时间:2010-02-12 09:52:06

标签: 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

由于

3 个答案:

答案 0 :(得分:19)

只要您不希望该属性持久存在,我就不明白为什么您无法创建您所描述的属性。我实际上在某些模型上做同样的事情来确定哪些是可编辑的。

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

答案 1 :(得分:5)

模型上的

Creating a property会执行此操作,但您将无法对其进行查询。

答案 2 :(得分:1)

要使其成为一个实例变量(因此每个实例都有自己的副本),您需要这样做

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

每本书现在都有一个可编辑的内容,不会保存到数据库中