我是Python和Django的新手,我试图了解Django的模型类(以及一般的类)是如何工作的。
如果您创建新模型:
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不会选择这些架构更改。我理解为什么这不起作用,我只是不确定我理解为什么上面的方法 工作。
提前致谢。
答案 0 :(得分:1)
在这里的问题中,这真的太复杂了。答案很简单,它都是用元类完成的,但是为了完整的解释,你应该阅读Marty Alchin的书 Pro Django 。
关键是你不希望self.title
成为一个字段实例:你希望它是标题的值。因此,(简化相当多)当从数据库构造模型实例时,元类通过类级别的Field属性,并且对于每个属性,它将实例级属性设置为db列的值。当然,在保存时,它会反过来。
答案 1 :(得分:0)
类以及如何定义django中的模型是不同的。 django中模型的定义只是使用python的语法作为字段和数据库相关信息的描述语言,然后django内省了提取此信息的类。但是对于其余的它是一个普通的python类,你可以定义方法等......