day35 crm开发之limit_choices_to筛选和时间选择框处理
limit_choices_to功能应用
django框架中models可以关联表limit_choices_to可进行关联数据筛选
class ClassList(models.Model):
"""
班级表
如:
Python全栈 面授班 5期 10000 2017-11-11 2018-5-11
"""
school = models.ForeignKey(verbose_name='校区', to='School')
course = models.ForeignKey(verbose_name='课程名称', to='Course')
semester = models.PositiveIntegerField(verbose_name="班级(期)")
price = models.PositiveIntegerField(verbose_name="学费")
start_date = models.DateField(verbose_name="开班日期")
graduate_date = models.DateField(verbose_name="结业日期", null=True, blank=True)
class_teacher = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='classes',
limit_choices_to={'depart__title': '教质部'},on_delete=models.CASCADE)
tech_teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo', related_name='teach_classes', blank=True,
limit_choices_to={'depart__title__in': ['Linux教学部', 'Python教学部']})
memo = models.TextField(verbose_name='说明', blank=True, null=True)
def __str__(self):
return "{0}({1}期)".format(self.course.name, self.semester)
时间选择框处理
添加和编辑班级管理页面时,日期输入框是文本输入框,应该是日期选择
需要下载插件datetimepicker
https://www.bootcss.com/p/bootstrap-datetimepicker/
将插件放在stark组件静态文件里
stark组件编写定制form
# -*- encoding: utf-8 -*-
"""
@File : widgets.py
@Time : 2022/3/6 15:52
@Author : simon
@Email : 294168604@qq.com
@Software: PyCharm
"""
from django import forms
class DateTimePickerInput(forms.TextInput):
template_name = 'stark/forms/widgets/datetime_picker.html'
新建form模板
基础模板引用插件
{% load static %}
大唐课程
{% block css %}{% endblock %}
{% block content %} {% endblock %}
<script src="{% static 'stark/js/jquery-3.3.1.min.js' %} "></script>
<script src="{% static 'stark/plugins/bootstrap/js/bootstrap.js' %} "></script>
<script src="{% static 'stark/plugins/datetimepicker/js/bootstrap-datetimepicker.js' %} "></script>
<script src="{% static 'stark/plugins/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js' %} "></script>
<script>
$('.form_date').datetimepicker({
minView: "month",
language: "zh-CN",
sideBySide: true,
format: 'yyyy-mm-dd',
bootcssVer: 3,
startDate: new Date(),
autoclose: true,
pickerPosition: "bottom-left"
});
</script>
{% block js %} {% endblock %}
web应用课程管理调用方式
# -*- encoding: utf-8 -*-
"""
@File : classList.py
@Time : 2022/3/6 14:29
@Author : simon
@Email : 294168604@qq.com
@Software: PyCharm
"""
from stark.service.v1 import StarkHandler, get_datetime_text, get_m2m_text, StarkModelForm
from stark.forms.widgets import DateTimePickerInput
from web import models
class ClassListModelForm(StarkModelForm):
class Meta:
model = models.ClassList
fields = '__all__'
widgets = {
'start_date': DateTimePickerInput,
'graduate_date': DateTimePickerInput,
}
class ClassListHandler(StarkHandler):
def display_course(self, obj=None, is_header=None):
if is_header:
return '班级'
return "%s %s期" % (obj.course.name, obj.semester,)
list_display = ['school', display_course, 'price', get_datetime_text('开班日期', 'start_date'),
'class_teacher', get_m2m_text('任课老师', 'tech_teachers')]
model_form_class = ClassListModelForm
效果展示