Files
test/app/model/__pycache__/student.cpython-311.pyc
T

41 lines
8.6 KiB
Plaintext
Raw Normal View History

2026-09-21 19:03:31 +08:00
§
1‡ªjÜãó¢—dZddlmZddlmZddlmZmZmZm Z ddl
m Z m Z m
Z
ddlmZmZmZddlmZmZmZddlmZGd „d
eee¦«Zd S) uN学生表(需求 2.1),系统的主表。
关于「年龄�的一个设计��
--------------------------------------------------------------------------
需求里把年龄列�了学生字段。这里**�� age 字段**,�存 birth_date:
* 年龄 = 按今天算出�的派生值。今天是 24 �,明年今天还是 24 就错了,
必须�定时任务去刷,多一个必定会�的字段。
* 需�"按年龄筛选"的场景(需求 2.6.1)用 SQL 表达�算:
``app.core.utils.age_expression()`` 把 birth_date 折�年数�与 WHERE。
* 出��时给 birth_date 和算好的 age,�端拿�直接用。
唯一例外:录入时对方�知�年龄�知�生日,入��许�传 age,
service 会用 ``guess_birth_date()`` 折算一个��生日并标记 ``birth_date_estimated=True``。
é)Ú annotations)Údate)ÚDateÚ
ForeignKeyÚStringÚText)ÚMappedÚ
mapped_columnÚ relationship)ÚBaseÚSoftDeleteMixinÚTimestampMixin)Ú GENDER_TEXTÚSTUDENT_STATUS_TEXTÚ
StudentStatus)Úcalc_agecóü—eZdZUdZddiZedd¬¦«Zded<eed¦«dd dd
¬ ¦«Z d ed
<eed¦«d dd¬¦«Z
d ed<edd dd¬¦«Z ded<ee d¬¦«Z
ded<edd d¬¦«Zded<eed¦«d¬¦«Zded <eed!¦«d"¬¦«Zded#<eed¦«d$¬¦«Zded%<eed&¦«d'¬¦«Zded(<ee d)¬¦«Zded*<ee d+¬¦«Zded,<eed&¦«d-¬¦«Zded.<eed¦«d/¬¦«Zded0<eed1¦«dd2¬3¦«Zd4ed5<eed6¦«dd7¬3¦«Zd4ed8<eeej¦«d dd9¬¦«Zded:<eed;¬¦«Zded<<e d=d>eg¬?¦«Z!d@edA<e d>¬B¦«Z"dCedD<e ddEdFdG¬H¦«Z#dIedJ<e dd d>¬K¦«Z$dLedM<e%d^dP„¦«Z&e%d_dR„¦«Z'e%d`dT„¦«Z(e%d_dU„¦«Z)e%d_dV„¦«Z*e%d_dW„¦«Z+e%dadY„¦«Z,e%dbd[„¦«Z-e%dad\„¦«Z.d]S)cÚStudentÚstudentÚcommentu学生基本信æ�¯è¡¨T)Ú primary_keyÚ
autoincrementz Mapped[int]ÚidéFu'å­¦å�·ï¼ˆæŒ‰è§„则生æˆ�,é�žè‡ªå¢žï¼‰)ÚuniqueÚnullableÚindexrz Mapped[str]Ústu_nouå§“å��)rrrÚnameéu性别 1=ç”· 2=女)ÚdefaultrrrÚgenderu6出生日期(年龄由此实时计算,ä¸�è�½åº“))rzMapped[date | None]Ú
birth_dateru6生日是å�¦ä¸ºæŒ‰å¹´é¾„推算的å� ä½�值 0=å�¦ 1=是)r!rrÚbirth_date_estimatedé<uç±�è´¯zMapped[str | None]Ú native_placeéPu 毕业院校Úgraduate_schoolu专业Úmajoréuå­¦åŽ†Ú educationu å…¥å­¦æ—¶é—´Ú enroll_dateu 毕业时间Ú
graduate_dateu è�”系电è¯�Úphoneu 身份è¯�å�·Úid_cardzclazz.idu 所属ç�­çº§)rrzMapped[int | None]Úclass_idz
advisor.idu 顾问编å�·Ú
advisor_idu*状æ€� 1=在读 2=进入就业 3=已就业Ústatusu'备注(æˆ�绩预警会自动追加)ÚremarkÚstudentsÚjoined)Úback_populatesÚlazyÚ foreign_keyszMapped['Clazz']Úklass)r7zMapped['Advisor']ÚadvisorÚselectinzScore.exam_seqzall, delete-orphan)r6r7Úorder_byÚcascadezMapped[list['Score']]Úscores)r6Úuselistr7zMapped['Employment']Ú
employmentÚreturnú
int | Nonecó*—t|j¦«S©N)rr#©Úselfs ú)D:\xwt0803\wolin_sms\app\model\student.pyÚagez Student.ageNs€å˜œÑ(Ô(Ð(óú
str | Nonecó4—tj|j¦«SrD)rÚgetr"rEs rGÚ gender_textzStudent.gender_textRs€åŒ˜tœ{Ñ+Ô+Ð+rIÚstrcó6—tj|jd¦«S)Nu未知)rrLr2rEs rGÚ status_textzStudent.status_textVs€å"Ô& t¤{°HÑ=Ô=Ð=rIcóL—|jr|jjdkr |jjndS©Nr)r9Úis_delrrEs rGÚ
class_namezStudent.class_nameZs&€à"&¤*ÐQ°´Ô1BÀaÒ1GÐ1GˆtŒzŒˆÈTÐQrIcóL—|jr|jjdkr |jjndSrR)r9rSÚclass_norEs rGrVzStudent.class_no^s)€à&*¤jÐU°T´ZÔ5FÈ!Ò5KÐ5KˆtŒzÔ"Ð"ÐQUÐUrIcóL—|jr|jjdkr |jjndSrR)r:rSrrEs rGÚ advisor_namezStudent.advisor_namebs)€à$(¤LÐW°T´\Ô5HÈAÒ5MÐ5MˆtŒ|Ô Ð ÐSWÐWrIÚintcó>—td„|jD¦«¦«S)Ncó(—g|]}|jdk¯
|‘ŒS©r)rS©Ú.0Úss rGú
<listcomp>z'Student.score_count.<locals>.<listcomp>hs€Ð<Ð<Ð<˜!¨a¬h¸!ªm¨m�A¨m¨m¨mrI©Úlenr>rEs rGÚ score_countzStudent.score_countfs!€åÐ<Ð<˜tœ{Ð<Ñ<Ô<Ñ=Ô=Ð=rIú float | Nonecó†—d„|jD¦«}|r-tt|¦«t|¦«z d¦«ndS)NcóZ—g|](}|jdk¯
|j®t|j¦«‘Œ)Sr\)rSÚscoreÚfloatr]s rGr`z%Student.avg_score.<locals>.<listcomp>ls1€Ð^Ð^Ð^ A¸¼ÀAº
¸
È!Ì'ÐJ]•�q”w‘”ÐJ]ÐJ]ÐJ]rIé)r>ÚroundÚsumrb)rFÚvalids rGÚ avg_scorezStudent.avg_scorejsB€à^Ð^¨¬Ð^Ñ^Ô^ˆØ49ÐC�u•S˜‘Z”Z¥# e¡*¤*Ñ,¨aÑ0Ô0Ð0¸tÐCrIcó>—td„|jD¦«¦«S)Ncó>—g|]}|jdk¯