• django入门-模型-part2


    尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6511177.html 

    完全翻译自官方文档 https://docs.djangoproject.com/en/1.10/intro/tutorial02/

    这章讲数据库相关

    在settings.py的数据库配置中默认是使用sqllite,如果只是用来练手那么你不用修改数据库的配置

    # Database
    # https://docs.djangoproject.com/en/1.10/ref/settings/#databases
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

    如果要用mysql,就是下面的配置

    DATABASES = { 
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',    # 数据库名称
            'USER': 'root',
            'PASSWORD': 'password',  
            'HOST': '127.0.0.1',
        }   
    }

    别忘了修改下配置文件的时区和语言

    LANGUAGE_CODE = 'zh-hans'  # django 1.10种要用zh-hans,如果用zh-cn会报错
    
    TIME_ZONE = 'Asia/Shanghai'

    django默认加载的apps(settings.py中的INSTALLED_APPS)需要用到数据库,下面我们先创建需要用的库和表

    python manage.py migrate

    下面在应用中创建数据库模型 polls/models.py

    from django.db import models
    
    
    class Question(models.Model):
        question_text = models.CharField(max_length=200)
        pub_date = models.DateTimeField('date published')
    
    
    class Choice(models.Model):
        question = models.ForeignKey(Question, on_delete=models.CASCADE)
        choice_text = models.CharField(max_length=200)
        votes = models.IntegerField(default=0)

    django支持数据库的外键: 多对一,多对多,一对一

    关于Field的具体内容请参考 https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.Field

    要是我们的model被django发现,需要在INSTALLED_APPS中添加我们的应用

    INSTALLED_APPS = [
        'pools',
        'suit',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]

    suit这个应用是django admin的一个扩展,可以让django的admin界面更好看,推荐!!!

    下面有几个命令要说明一下

    python manage.py makemigrations polls #在本地生成一个文件 ,记录你的model的变动
    
    python manage.py sqlmigrate polls 0001 # 详细显示出django根据这次修改的model.py文件 实际要做的事,它只是打印一下内容,而不会实际去修改数据库
    
    python manage.py migrate # 运行这个命令,你的数据库就根据你的models.py完成修改了

    python manager.py check # 检查你的model.py

    如果你要修改你的模型models.py 记住3个步骤

    1. 修改你的models.py
    2. 执行  python manage.py makemigrations 
    3. python manage.py migrate 应用修改

    最好为你的每个模型添加__str__()方法,这会让你的模型的输出更加友好

    不然可能是这样的输出

    >>> Question.objects.all()
    <QuerySet [<Question: Question object>]>

    所以请添加__str__()方法

    from django.db import models
    from django.utils.encoding import python_2_unicode_compatible
    
    @python_2_unicode_compatible  # 兼容python2
    class Question(models.Model):
        # ...
        def __str__(self):
            return self.question_text
    
    @python_2_unicode_compatible  
    class Choice(models.Model):
        # ...
        def __str__(self):
            return self.choice_text

    然后它会这么显示

    # Make sure our __str__() addition worked.
    >>> Question.objects.all()
    <QuerySet [<Question: What's up?>]>

    django自带管理后台,可以方便的查看和修改数据库内容

    我们先创建后台界面的管理员账户

    python manage.py createsuperuser  #根据提示输入用户名,邮箱,密码

    现在可以访问后台界面了 http://127.0.0.1:8000/admin/

    如果你想通过后台展示你的模型,修改应用里的admin.py

    from django.contrib import admin
    
    from .models import Question
    
    admin.site.register(Question)

    本节完

  • 相关阅读:
    Qt 模拟一个导航定位系统
    【编程之美】用C语言实现状态机(实用)
    代码面试之链表
    乾坤合一~Linux设备驱动之USB主机和设备驱动
    乾坤合一~Linux设备驱动之I2C核心、总线以及设备驱动
    乾坤合一~Linux设备驱动之终端设备驱动
    乾坤合一~Linux设备驱动之块设备驱动
    蜕变成蝶~Linux设备驱动之watchdog设备驱动
    蜕变成蝶~Linux设备驱动之按键设备驱动
    蜕变成蝶~Linux设备驱动之DMA
  • 原文地址:https://www.cnblogs.com/txwsqk/p/6511177.html
Copyright © 2020-2023  润新知