欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-20 17:35:52
参考 "编写你的第一个 Django 应用,第 2 部分" 创建项目后,首先用中文命名应用: 之后在 建立模型,其他各种相关配置略去,详细请见末尾源码库: 交互环境测试API通过: 完整源码在: "program in chinese/Django_tutorial_zh" 测试环境:Python ......

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