跟大妈学Django Part - 13 (Django入门续集13)
这个叫recordemo的App主要目的是记录心情。用CRUD来说的话,即是往数据库里添加资料。
其实要使这个app fully functioning,要写的代码还是很多的。起码对我这个新手来说,多。呵呵。
我们会通过Model, View, Form, Admin ,Template 和Urls.py 这几个方面讲讲。趁记忆犹新之时,尽快记录一下。
目录
models.py
/workspace/how-do-you-do/recordemo/models.py
代码预览
from django.db import models
from profiles.models import UserProfile
class AddFeeling(models.Model):
FEELING_TYPES = [
('happy', 'Happy'),
('excited', 'Excited'),
('calm', 'Calm'),
('disppointed', 'Disppointed'),
('anxious', 'Anxious'),
('angry', 'Angry'),
]
user_profile = models.ForeignKey(
UserProfile,
on_delete=models.SET_NULL,
null=True, blank=True,
related_name='user_feelings'
)
date = models.DateField(null=True)
feelings = models.CharField(
choices=FEELING_TYPES,
null=True,
max_length=15
)
details = models.TextField(null=True)
def __str__(self):
return self.feelings
代码解析
- 这个model 需要import UserProfile 这个App,这个app 主要是为个人建立profile的一个app, 晚些会介绍到。在这里,除了import自己写的UserProfile,我觉得其实import Django 自带的User也是可以的。但是,由于我作业的时间比较紧,我并没有验证。
from profiles.models import UserProfile
- AddFeeling 是这个model的名字,引用Django的models.Model
class AddFeeling(models.Model):
- 接下来建一组心情的选择项,供用户可以选择,当然,也可以选择input的方式让用户自己输入,但是,如此一来,心情便是各式各样了。感觉有点乱?
FEELING_TYPES = [
('happy', 'Happy'),
('excited', 'Excited'),
('calm', 'Calm'),
('disppointed', 'Disppointed'),
('anxious', 'Anxious'),
('angry', 'Angry'),
]
-
这个user_profile的主要目的是把心情归于个人。
-
一个人可以有很多种情绪,所以,我们用到了ForeignKey,one to many(一对多)的关系。关联UserProfile Model。
-
on_delete : 同时删除相关的资料。例如用户张三删除了,那么与张三相关的资料也一并删除。
-
SET_NULL:删除完毕以后,该位置设为null,即允许写入新的数据,否者,Django会报错,显示该位置已有数据,无法写入。同理的还有null=True,设定该位置可以写入新的数据。
-
blank=True:主要是规定提交表格的时候,该位置能否为空。True即是可以,False即是要求填写,否者无法提交。
-
related_name:给主表和子表设定一个名字。这篇文章解释得很好。分享。
user_profile = models.ForeignKey(
UserProfile,
on_delete=models.SET_NULL,
null=True, blank=True,
related_name='user_feelings'
)
- Date 使用的是DateField, 即输出的是日期的格式。设定该格子可以替代写入。
date = models.DateField(null=True)
- feelings 使用的是CharField,选择是我们刚开始设定的一个feeling组。设定该格子可以替代写入。最长字数为15个。
feelings = models.CharField(
choices=FEELING_TYPES,
null=True,
max_length=15
)
- details 使用的是TextField,允许用户自行输入内容,且设定该格子可以替代写入。这个主要是为用户提供一个详细记载心情的区域的。
details = models.TextField(null=True)
- 设定admin显示的方式。这篇文章介绍得很详细 Customize the Django Admin With Python
def __str__(self):
return self.feelings
如此一来,Model就算是写完了。接下来,我们就可以写form.py了。