1.表结构
"# models.py"
> class Task(models.Model):
class Meta:
db_table = "task"
person_res = models.ForeignKey('Res_person',on_delete=models.CASCADE,)
co_person = models.ManyToManyField('Res_person', related_name='协同人')
cpl_state = models.BooleanField(default=False)
deadlines = models.DateField()
sort = models.ForeignKey('Category',on_delete=models.CASCADE,)
content = models.TextField()
...
其它字段
> class Res_person(models.Model):
class Meta:
db_table = "res_person"
name = models.CharField(max_length=12, null=False)
pro_group = models.ForeignKey('Progroup',models.CASCADE)
def __str__(self):
return self.name
2.基本方法
# 以下是几种常用的方法
Task.objects.all() #获取所有task对象
Task.objects.filter(id=1) #获取第一项task
#创建表并为表中的项赋值
Task.objects.create(person_res_id= user_person, deadlines=user_deadline,)
which=Task.objects.get(id=which_task) #获取第which_task项任务(只能是一条)
which.co_person.count() #此项任务有多少个协同人
which.person_res.delete() #删掉此项任务的主负责人
3.特别说明
#html form表单 p.name 为任务的主负责人
<input type="radio" name="res_person" value="{{p.name}}">{{p.name}}
#view.py
# 从html中获取input 里value属性中的值;get里面是name不是id
user_person = request.POST.get('res_person')
# 一定是要先获得person的对象之后再传入到Task里面
person= Res_person.objects.get(name=user_person)
# person作为Task的外键,因此传入的是person对象
task = Task.objects.create(person_res= user_person, deadlines=user_deadline, sort=sort, content=user_task,)
4.django使用Q对象进行复杂查询
- filter() 等方法中的关键字参数查询都是一起进行“AND” 的。 如果你需要执行更复杂的查询(例如OR 语句),可以使用Q 对象。Q 对象 (django.db.models.Q) 对象用于封装一组关键字参数。
- from django.db.models import Q
# 获取电气专业组
pro_gup=Progroup.objects.get(pro_group = "电气专业组")
# 筛选出电气组专业组的成员
pro_persons = Res_person.objects.filter(pro_group = pro_gup)
# 使用Q对象结合flier常用查询条件 筛选出电气专业组成员已完成的任务
task_c = Task.objects.filter(Q(cpl_state=True) & Q(person_res__in=pro_persons)).order_by('deadlines')
5.Q 查询 filter 常用查询条件
- 上段Q(person_res__in=pro_persons))就使用到了"_in"的查询方法,更多的查询方法如下:
__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__range 在...范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。