我是Python和Django的新手,我想了解Django的Model Class(以及一般的类)如何工作。
如果创建新模型:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
现在,您可以执行以下操作:
>>> from myapp.models import Book
>>> book = Book(title="a new book", author="bob")
>>> book.save()
>>> print book.title
a new book
太好了,它有效。但是Book类从Model类继承的方式有点令人困惑。似乎标题和作者充当实例变量,但查看类定义,似乎它们是静态的。
from django.db import models
class Book(models.Model):
def __init__(self, *args, **kwargs):
self.title = models.Charfield(max_length=200)
self.author = models.CharField(max_length=200)
super(Book, self).__init__()
对我来说,这似乎是声明类的更直观的方法,但是当我运行迁移时,Django不会选择这些模式更改。我明白为什么这是行不通的,我只是不知道我理解为什么上面的方法做的工作。
提前致谢。
这真的太复杂了,无法在此处回答问题。快速的答案是,所有这些都由元类完成,但是要获得完整的解释,您应该阅读Marty Alchin的书Pro Django。
关键是,self.title
例如,您不希望成为字段实例:您希望其成为标题名称的任何值。因此,(从很大程度上简化了)从数据库构造模型实例时,元类将遍历类级别的Field属性,并且对于每个属性,它将实例级属性设置为db列的值。当然,保存时它的作用相反。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句