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

效果展示

相关