中文代码之Django官方入门:建立模型

参考编写你的第一个 Django 应用,第 2 部分

创建项目后,首先用中文命名应用:

$ python3 manage.py startapp 投票

之后在models.py建立模型,其他各种相关配置略去,详细请见末尾源码库:

import datetime

from django.db import models
from django.utils import timezone

class 问题(models.Model):
    内容 = models.CharField(max_length=200)
    发问日期 = models.DateTimeField('发布问题日期')

    def __str__(self):
        return self.内容

    def 刚发问(self):
        return self.发问日期 >= timezone.now() - datetime.timedelta(days=1)

class 选项(models.Model):
    问题 = models.ForeignKey(问题, on_delete=models.CASCADE)
    内容 = models.CharField(max_length=200)
    票数 = models.IntegerField(default=0)

    def __str__(self):
        return self.内容

交互环境测试API通过:

$ python3 manage.py shell
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from 投票.models import 选项, 问题
>>> 问题.objects.all()
<QuerySet [<问题: 最近可好?>]>
>>> 问题.objects.filter(id=1)
<QuerySet [<问题: 最近可好?>]>
>>> 问题.objects.filter(内容__startswith='最')
<QuerySet [<问题: 最近可好?>]>
>>> from django.utils import timezone
>>> 今年=timezone.now().year
>>>
>>> 问题.objects.get(发问日期__year=今年)
<问题: 最近可好?>
>>> 问题.objects.get(id=2)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/query.py", line 408, in get
    self.model._meta.object_name
投票.models.问题.DoesNotExist: 问题 matching query does not exist.
>>> 问问
>>> 问=问题.objects.get(pk=1)
>>> 问.刚发问()
True
>>> 问.选项_set.all()
<QuerySet []>
>>> 问.选项_set.create(内容='没啥', 票数=0)
<选项: 没啥>
>>> 问.选项_set.create(内容='看天', 票数=0)
<选项: 看天>
>>> 选=问.选项_set.create(内容='打字', 票数=0)
>>> 选.问题
<问题: 最近可好?>
>>> 问.选项_set.all()
<QuerySet [<选项: 没啥>, <选项: 看天>, <选项: 打字>]>
>>> 问.选项_set.count()
3
>>> 选项.objects.filter(问题__发问日期__year=今年)
<QuerySet [<选项: 没啥>, <选项: 看天>, <选项: 打字>]>
>>> 选=问.选项_set.filter(内容__startswith='打')
>>> 选.delete()
(1, {'投票.选项': 1})
>>> 选项.objects.filter(问题__发问日期__year=今年)
<QuerySet [<选项: 没啥>, <选项: 看天>]>

完整源码在:program-in-chinese/Django_tutorial_zh

测试环境:Python 3.7.3, Django-2.2.3, Mac

原文地址:https://www.cnblogs.com/program-in-chinese/p/11168960.html

时间: 2024-11-13 05:04:27

中文代码之Django官方入门:建立模型的相关文章

2017-11-20 中文代码示例之Vuejs入门教程(一)问题后续

"中文编程"知乎专栏原文 第一个issue: Error compiling template if using unicode naming as v-for alias · Issue #6971 · vuejs/vue 多谢尤大搞定, 貌似是把标识符的正则表达式匹配检测去掉了. 经测试已经不再在控制台报警告. 第二个issue: Unicode naming for methods seems unsupported. Some warning will be appreciat

Android官方入门文档[16]创建一个Fragment代码片段

Android官方入门文档[16]创建一个Fragment代码片段 Creating a Fragment创建一个Fragment代码片段 This lesson teaches you to1.Create a Fragment Class2.Add a Fragment to an Activity using XML You should also read?Fragments 这节课教你1.创建一个Fragment代码片段类2.使用XML来添加一个Fragment代码片段给一个活动 你也

2018-06-20 中文代码示例视频演示Python入门教程第三章 简介Python

知乎原链 Python 3.6.5官方入门教程中示例代码汉化后演示 对应在线文档: 3. An Informal Introduction to Python 不知如何合集, 请指教. 中文代码示例Python入门教程 3.1.1_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 中文代码示例Python入门教程 3.1.2 第一部分_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 中文代码示例Python入门教程 3.1.2 第二部分_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

Django开发运维后台(二):建立模型与更新数据

上一篇文章我已经新建了一个SaAdmin的APP,现在开始在这APP下面来code 1.修改setting.py的数据库连接: DATABASES = {     'default': {         'ENGINE':'django.db.backends.mysql',         'NAME': 'QjshAdmin',         'USER': 'root',         'PASSWORD': 'lihuipeng',         'HOST': 'localho

Android官方入门文档[5]建立操作栏

Android官方入门文档[5]建立操作栏 Setting Up the Action Bar建立操作栏 This lesson teaches you to1.Support Android 3.0 and Above Only2.Support Android 2.1 and Above You should also read?Setting Up the Support Library 这节课教你1.仅支持Android3.0及以上2.支持Android2.1及以上 你也应该阅读?设置支

2018-06-21 中文代码示例视频演示Python入门教程第五章 数据结构

知乎原链 续前作: 中文代码示例视频演示Python入门教程第四章 控制流 对应在线文档: 5. Data Structures 这一章起初还是采取了尽量与原例程相近的汉化方式, 但有些语义较偏(如Trondheim的hammer dance). 鉴于这一教程的目的在于使人尽量快速入门Python, 而任何不熟悉的词汇都会加上不必要的负担. 于是最终决定不拘泥于与原例程的"形似", 而采取在例程中使用更为国人熟知的词汇了. 中文代码示例Python入门教程 5.1 列表详述_哔哩哔哩

2018-06-20 中文代码示例视频演示Python入门教程第四章 控制流

知乎原链 续前作: 中文代码示例视频演示Python入门教程第三章 简介Python 对应在线文档: 4. More Control Flow Tools 录制中出了不少岔子. 另外, 输入法确实是一个短板. 中文代码示例Python入门教程 4.1 if条件语句 & 4.2 for语句_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili? 中文代码示例Python入门教程 4.3 range函数_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili? 中文代码示例Python入门教程 4.4 b

django模型:为已存在的表建立模型

为已经存在的表建立模型:参考https://blog.csdn.net/opera95/article/details/78200024 为已经存在的表建立模型1.python manage.py inspectdb > 1.py2.打开1.py找到需要的表的模型类,把元选项meta中的 值改为True3.把改好的模型类复制到models.py中,注意如果定义有管理器,需要再向模型类中添加.4.现在就可以访问了. 原文地址:https://www.cnblogs.com/andy9468/p/8

[Python] Django框架入门

说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ./manager.py xxx 准备:已经安装python并加入环境变量 已安装 django 设计框架对比(引用,可自行搜索): 1.MVC MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model,主要用于对数据库的封装 v表示