参考编写你的第一个 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

最新文章

  1. noip2010提高组3题题解 by rLq
  2. 《征服 C 指针》摘录3:数组 与 指针
  3. /etc/passwd和/etc/shadow
  4. php微信接口实例
  5. 蓝桥杯 algo——6 安慰奶牛 (最小生成树)
  6. 服务器NPC的ID如何分配的
  7. weblogic启动问题
  8. 【从翻译mos文章】在OGG (Oracle GoldenGate) 正在使用SCHEMATRANDATA如果,需要额外的db patch
  9. c++的string容器
  10. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹
  11. Asp.Net请求响应过程
  12. 数据结构学习:KMP模式匹配算法
  13. webpack核心概念
  14. Windows7驱动调试小Tips
  15. react-native项目中禁止截屏与录屏
  16. Vb6调用C#生成的dll
  17. caz,数字证书,公钥
  18. bodymovin实现将AE动画转换成HTML5动画
  19. Python学习笔记_03:简单操作MongoDB数据库
  20. 在EC2上创建root用户,并使用root用户登录

热门文章

  1. 设计院老师良心汇总:值得牢记的15个CAD基础技巧,能帮大忙
  2. Data Management Technology(3) -- SQL
  3. &#39;Specifying a namespace in include() without providing an app_name &#39;
  4. Pycharm界面的子窗口不见了,怎么办?
  5. bay——RAC 关闭和启动顺序,状态查看.txt
  6. Redis 通过 scan 找出不过期的 key
  7. JVM-2-JVM结构
  8. LeetCode 1248. 统计「优美子数组」
  9. 算法问题实战策略 FENCE
  10. 第05组 Alpha冲刺(1/4)