django官方文档学习(一)

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

这段模型层代码在执行的时候其实和MYSQL中创建table的语法功能一致:

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

只不过创建table的名字是(app名字_模型名字),主键会自动创建,所以一般不用自己制定

模型中若是可以为空,则指定blank=True

要是指定下拉框,choices指定是一个二维元祖

YEAR_IN_SCHOOL_CHOICES = (
    ('FR', 'Freshman'),
    ('SO', 'Sophomore'),
    ('JR', 'Junior'),
    ('SR', 'Senior'),
    ('GR', 'Graduate'),
)
>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size#这样只会返回类似字典的键
'L'
>>> p.get_shirt_size_display()#这样才会返回对应的值p.get_foo_display()
'Large'

小配件help_text可以指定一个string,到了HTML中会附加在选项后边

抽象基类:

from django.db import models

class CommonInfo(models.Model):
    name = models.CharField(max_length=100)
    age = models.PositiveIntegerField()

    class Meta:
        abstract = True

class Student(CommonInfo):
    home_group = models.CharField(max_length=5)

在一个模型中定义META的abstract为True的话,其它模型类可以直接进行继承,避免了代码重写

from django.db import models

class CommonInfo(models.Model):
    # ...
    class Meta:
        abstract = True
        ordering = ['name']

class Student(CommonInfo):
    # ...
    class Meta(CommonInfo.Meta):
        db_table = 'student_info'

但是继承的模型类会继承父类META,如果需要更改的话,还需要专门继承后再改写

多个模型类继承之后相当于OnetoOne模式,可以进行跨表访问,通过点出模型名字的方式

多表继承主键需要自己重写,或者直接一对一关联起来

猜你喜欢

转载自blog.csdn.net/weixin_42557907/article/details/81462759