<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理

      choices參數,MTV與MCV模型,多對多三種創建方式

      Posted on 2023-06-24 14:33  亂了啦  閱讀(41)  評論(0)    收藏  舉報
      choices參數(數據庫字段設計常見)
      """
      用戶表	
      	性別
      	學歷
      	工作經驗
      	是否結婚
      	是否生子
      	客戶來源
      	...
      針對某個可以列舉完全的可能性字段,我們應該如何存儲
      
      只要某個字段的可能性是可以列舉完全的,那么一般情況下都會采用choices參數
      """
      class User(models.Model):
          username = models.CharField(max_length=32)
          age = models.IntegerField()
          # 性別
          gender_choices = (
              (1,'男'),
              (2,'女'),
              (3,'其他'),
          )
          gender = models.IntegerField(choices=gender_choices)
          
          score_choices = (
              ('A','優秀'),
              ('B','良好'),
              ('C','及格'),
              ('D','不合格'),
          )
          # 保證字段類型跟列舉出來的元祖第一個數據類型一致即可
          score = models.CharField(choices=score_choices,null=True)
          """
          該gender字段存的還是數字 但是如果存的數字在上面元祖列舉的范圍之內
          那么可以非常輕松的獲取到數字對應的真正的內容
          
          1.gender字段存的數字不在上述元祖列舉的范圍內容
          2.如果在 如何獲取對應的中文信息
          """
          
            
          from app01 import models
          # models.User.objects.create(username='jason',age=18,gender=1)
          # models.User.objects.create(username='egon',age=85,gender=2)
          # models.User.objects.create(username='tank',age=40,gender=3)
          # 存的時候 沒有列舉出來的數字也能存(范圍還是按照字段類型決定)
          # models.User.objects.create(username='tony',age=45,gender=4)
      
          # 取
          # user_obj = models.User.objects.filter(pk=1).first()
          # print(user_obj.gender)
          # 只要是choices參數的字段 如果你想要獲取對應信息 固定寫法 get_字段名_display()
          # print(user_obj.get_gender_display())
      
          user_obj = models.User.objects.filter(pk=4).first()
          # 如果沒有對應關系 那么字段是什么還是展示什么
          print(user_obj.get_gender_display())  # 4
      

        

      實際項目案例
        1 # CRM相關內部表
        2 class School(models.Model):
        3     """
        4     校區表
        5     如:
        6         北京沙河校區
        7         上海校區
        8 
        9     """
       10     title = models.CharField(verbose_name='校區名稱', max_length=32)
       11 
       12     def __str__(self):
       13         return self.title
       14 
       15 class Course(models.Model):
       16     """
       17     課程表
       18     如:
       19         Linux基礎
       20         Linux架構師
       21         Python自動化開發精英班
       22         Python自動化開發架構師班
       23         Python基礎班
       24         go基礎班
       25     """
       26     name = models.CharField(verbose_name='課程名稱', max_length=32)
       27 
       28     def __str__(self):
       29         return self.name
       30 
       31 class Department(models.Model):
       32     """
       33     部門表
       34     市場部     1000
       35     銷售       1001
       36 
       37     """
       38     title = models.CharField(verbose_name='部門名稱', max_length=16)
       39     code = models.IntegerField(verbose_name='部門編號', unique=True, null=False)
       40 
       41     def __str__(self):
       42         return self.title
       43 
       44 class UserInfo(models.Model):
       45     """
       46     員工表
       47     """
       48 
       49     name = models.CharField(verbose_name='員工姓名', max_length=16)
       50     email = models.EmailField(verbose_name='郵箱', max_length=64)
       51     depart = models.ForeignKey(verbose_name='部門', to="Department",to_field="code")
       52     user=models.OneToOneField("User",default=1)
       53     def __str__(self):
       54         return self.name
       55 
       56 class ClassList(models.Model):
       57     """
       58     班級表
       59     如:
       60         Python全棧  面授班  5期  10000  2017-11-11  2018-5-11
       61     """
       62     school = models.ForeignKey(verbose_name='校區', to='School')
       63     course = models.ForeignKey(verbose_name='課程名稱', to='Course')
       64     semester = models.IntegerField(verbose_name="班級(期)")
       65 
       66 
       67     price = models.IntegerField(verbose_name="學費")
       68     start_date = models.DateField(verbose_name="開班日期")
       69     graduate_date = models.DateField(verbose_name="結業日期", null=True, blank=True)
       70     memo = models.CharField(verbose_name='說明', max_length=256, blank=True, null=True, )
       71 
       72     teachers = models.ManyToManyField(verbose_name='任課老師', to='UserInfo',limit_choices_to={'depart':1002})
       73     tutor = models.ForeignKey(verbose_name='班主任', to='UserInfo',related_name="class_list",limit_choices_to={'depart':1006})
       74 
       75 
       76     def __str__(self):
       77         return "{0}({1}期)".format(self.course.name, self.semester)
       78 
       79 
       80 class Customer(models.Model):
       81     """
       82     客戶表
       83     """
       84     qq = models.CharField(verbose_name='qq', max_length=64, unique=True, help_text='QQ號必須唯一')
       85 
       86     name = models.CharField(verbose_name='學生姓名', max_length=16)
       87     gender_choices = ((1, ''), (2, ''))
       88     gender = models.SmallIntegerField(verbose_name='性別', choices=gender_choices)
       89 
       90     education_choices = (
       91         (1, '重點大學'),
       92         (2, '普通本科'),
       93         (3, '獨立院校'),
       94         (4, '民辦本科'),
       95         (5, '大專'),
       96         (6, '民辦專科'),
       97         (7, '高中'),
       98         (8, '其他')
       99     )
      100     education = models.IntegerField(verbose_name='學歷', choices=education_choices, blank=True, null=True, )
      101     graduation_school = models.CharField(verbose_name='畢業學校', max_length=64, blank=True, null=True)
      102     major = models.CharField(verbose_name='所學專業', max_length=64, blank=True, null=True)
      103 
      104     experience_choices = [
      105         (1, '在校生'),
      106         (2, '應屆畢業'),
      107         (3, '半年以內'),
      108         (4, '半年至一年'),
      109         (5, '一年至三年'),
      110         (6, '三年至五年'),
      111         (7, '五年以上'),
      112     ]
      113     experience = models.IntegerField(verbose_name='工作經驗', blank=True, null=True, choices=experience_choices)
      114     work_status_choices = [
      115         (1, '在職'),
      116         (2, '無業')
      117     ]
      118     work_status = models.IntegerField(verbose_name="職業狀態", choices=work_status_choices, default=1, blank=True,
      119                                       null=True)
      120     company = models.CharField(verbose_name="目前就職公司", max_length=64, blank=True, null=True)
      121     salary = models.CharField(verbose_name="當前薪資", max_length=64, blank=True, null=True)
      122 
      123     source_choices = [
      124         (1, "qq群"),
      125         (2, "內部轉介紹"),
      126         (3, "官方網站"),
      127         (4, "百度推廣"),
      128         (5, "360推廣"),
      129         (6, "搜狗推廣"),
      130         (7, "騰訊課堂"),
      131         (8, "廣點通"),
      132         (9, "高校宣講"),
      133         (10, "渠道代理"),
      134         (11, "51cto"),
      135         (12, "智匯推"),
      136         (13, "網盟"),
      137         (14, "DSP"),
      138         (15, "SEO"),
      139         (16, "其它"),
      140     ]
      141     source = models.SmallIntegerField('客戶來源', choices=source_choices, default=1)
      142     referral_from = models.ForeignKey(
      143         'self',
      144         blank=True,
      145         null=True,
      146         verbose_name="轉介紹自學員",
      147         help_text="若此客戶是轉介紹自內部學員,請在此處選擇內部學員姓名",
      148         related_name="internal_referral"
      149     )
      150     course = models.ManyToManyField(verbose_name="咨詢課程", to="Course")
      151 
      152     status_choices = [
      153         (1, "已報名"),
      154         (2, "未報名")
      155     ]
      156     status = models.IntegerField(
      157         verbose_name="狀態",
      158         choices=status_choices,
      159         default=2,
      160         help_text=u"選擇客戶此時的狀態"
      161     )
      162 
      163     consultant = models.ForeignKey(verbose_name="課程顧問", to='UserInfo', related_name='consultanter',limit_choices_to={'depart':1001})
      164 
      165     date = models.DateField(verbose_name="咨詢日期", auto_now_add=True)
      166     recv_date = models.DateField(verbose_name="當前課程顧問的接單日期", null=True)
      167     last_consult_date = models.DateField(verbose_name="最后跟進日期", )
      168 
      169     def __str__(self):
      170         return self.name
      171 
      172 class ConsultRecord(models.Model):
      173     """
      174     客戶跟進記錄
      175     """
      176     customer = models.ForeignKey(verbose_name="所咨詢客戶", to='Customer')
      177     consultant = models.ForeignKey(verbose_name="跟蹤人", to='UserInfo',limit_choices_to={'depart':1001})
      178     date = models.DateField(verbose_name="跟進日期", auto_now_add=True)
      179     note = models.TextField(verbose_name="跟進內容...")
      180 
      181     def __str__(self):
      182         return self.customer.name + ":" + self.consultant.name
      183 
      184 class Student(models.Model):
      185     """
      186     學生表(已報名)
      187     """
      188     customer = models.OneToOneField(verbose_name='客戶信息', to='Customer')
      189     class_list = models.ManyToManyField(verbose_name="已報班級", to='ClassList', blank=True)
      190 
      191     emergency_contract = models.CharField(max_length=32, blank=True, null=True, verbose_name='緊急聯系人')
      192     company = models.CharField(verbose_name='公司', max_length=128, blank=True, null=True)
      193     location = models.CharField(max_length=64, verbose_name='所在區域', blank=True, null=True)
      194     position = models.CharField(verbose_name='崗位', max_length=64, blank=True, null=True)
      195     salary = models.IntegerField(verbose_name='薪資', blank=True, null=True)
      196     welfare = models.CharField(verbose_name='福利', max_length=256, blank=True, null=True)
      197     date = models.DateField(verbose_name='入職時間', help_text='格式yyyy-mm-dd', blank=True, null=True)
      198     memo = models.CharField(verbose_name='備注', max_length=256, blank=True, null=True)
      199 
      200     def __str__(self):
      201         return self.customer.name
      202 
      203 class ClassStudyRecord(models.Model):
      204     """
      205     上課記錄表 (班級記錄)
      206     """
      207     class_obj = models.ForeignKey(verbose_name="班級", to="ClassList")
      208     day_num = models.IntegerField(verbose_name="節次", help_text=u"此處填寫第幾節課或第幾天課程...,必須為數字")
      209     teacher = models.ForeignKey(verbose_name="講師", to='UserInfo',limit_choices_to={'depart':1002})
      210     date = models.DateField(verbose_name="上課日期", auto_now_add=True)
      211 
      212     course_title = models.CharField(verbose_name='本節課程標題', max_length=64, blank=True, null=True)
      213     course_memo = models.TextField(verbose_name='本節課程內容概要', blank=True, null=True)
      214     has_homework = models.BooleanField(default=True, verbose_name="本節有作業")
      215     homework_title = models.CharField(verbose_name='本節作業標題', max_length=64, blank=True, null=True)
      216     homework_memo = models.TextField(verbose_name='作業描述', max_length=500, blank=True, null=True)
      217     exam = models.TextField(verbose_name='踩分點', max_length=300, blank=True, null=True)
      218 
      219     def __str__(self):
      220         return "{0} day{1}".format(self.class_obj, self.day_num)
      221 
      222 class StudentStudyRecord(models.Model):
      223     '''
      224     學生學習記錄
      225     '''
      226     classstudyrecord = models.ForeignKey(verbose_name="第幾天課程", to="ClassStudyRecord")
      227     student = models.ForeignKey(verbose_name="學員", to='Student')
      228 
      229 
      230 
      231 
      232 
      233 
      234 
      235     record_choices = (('checked', "已簽到"),
      236                       ('vacate', "請假"),
      237                       ('late', "遲到"),
      238                       ('noshow', "缺勤"),
      239                       ('leave_early', "早退"),
      240                       )
      241     record = models.CharField("上課紀錄", choices=record_choices, default="checked", max_length=64)
      242     score_choices = ((100, 'A+'),
      243                      (90, 'A'),
      244                      (85, 'B+'),
      245                      (80, 'B'),
      246                      (70, 'B-'),
      247                      (60, 'C+'),
      248                      (50, 'C'),
      249                      (40, 'C-'),
      250                      (0, ' D'),
      251                      (-1, 'N/A'),
      252                      (-100, 'COPY'),
      253                      (-1000, 'FAIL'),
      254                      )
      255     score = models.IntegerField("本節成績", choices=score_choices, default=-1)
      256     homework_note = models.CharField(verbose_name='作業評語', max_length=255, blank=True, null=True)
      257     note = models.CharField(verbose_name="備注", max_length=255, blank=True, null=True)
      258 
      259     homework = models.FileField(verbose_name='作業文件', blank=True, null=True, default=None)
      260     stu_memo = models.TextField(verbose_name='學員備注', blank=True, null=True)
      261     date = models.DateTimeField(verbose_name='提交作業日期', auto_now_add=True)
      262 
      263     def __str__(self):
      264         return "{0}-{1}".format(self.classstudyrecord, self.student)
      265          
      266 """
      267 chocies參數使用場景是非常廣泛的
      268 """
      View Code
      MTV與MVC模型
      # MTV:Django號稱是MTV模型
      M:models
      T:templates
      V:views
      # MVC:其實django本質也是MVC
      M:models
      V:views
      C:controller
        
      # vue框架:MVVM模型
      

        

      多對多三種創建方式
      # 全自動:利用orm自動幫我們創建第三張關系表
      	class Book(models.Model):
          name = models.CharField(max_length=32)
          authors = models.ManyToManyField(to='Author')
      	class Author(models.Model):
          name = models.CharField(max_length=32)
      	"""
      	優點:代碼不需要你寫 非常的方便 還支持orm提供操作第三張關系表的方法...
      	不足之處:第三張關系表的擴展性極差(沒有辦法額外添加字段...)
      	"""
      # 純手動
      	class Book(models.Model):
          name = models.CharField(max_length=32)
          
      	class Author(models.Model):
          name = models.CharField(max_length=32)
        
        class Book2Author(models.Model):
          book_id = models.ForeignKey(to='Book')
          author_id = models.ForeignKey(to='Author')
        '''
        優點:第三張表完全取決于你自己進行額外的擴展
        不足之處:需要寫的代碼較多,不能夠再使用orm提供的簡單的方法
        不建議你用該方式
        '''
      
      # 半自動
      class Book(models.Model):
          name = models.CharField(max_length=32)
          authors = models.ManyToManyField(to='Author',
                                           through='Book2Author',
                                           through_fields=('book','author')
                                           )
      class Author(models.Model):
          name = models.CharField(max_length=32)
          # books = models.ManyToManyField(to='Book',
          #                                  through='Book2Author',
          #                                  through_fields=('author','book')
          #                                  )
      class Book2Author(models.Model):
          book = models.ForeignKey(to='Book')
          author = models.ForeignKey(to='Author')
      
      """
      through_fields字段先后順序
          判斷的本質:
              通過第三張表查詢對應的表 需要用到哪個字段就把哪個字段放前面
          你也可以簡化判斷
              當前表是誰 就把對應的關聯字段放前面
              
              
      半自動:可以使用orm的正反向查詢 但是沒法使用add,set,remove,clear這四個方法
      """
      

        

      主站蜘蛛池模板: 国产成人精品亚洲午夜麻豆| 亚洲国产日韩伦中文字幕| 国产精品久久久一区二区三区 | 精品熟女少妇av免费久久| 精品一区二区三区蜜桃久| 欧美亚洲国产日韩电影在线| 久久99精品久久久久久9| 国产精品人成视频免| 无码国内精品久久人妻蜜桃| 国产黑色丝袜在线播放| 久久亚洲精品中文字幕无| 在线看无码的免费网站| 国产亚洲一二三区精品| 亚洲av永久一区二区| 亚洲高清日韩heyzo| 中文字幕亚洲男人的天堂网络| 丝袜美腿一区二区三区| 国产美女免费永久无遮挡| 在线高清免费不卡全码| 日韩国产成人精品视频| 国产成人高清亚洲综合| 久久久天堂国产精品女人| 无遮高潮国产免费观看| 无码人妻丰满熟妇啪啪| 国产综合久久久久久鬼色| 精品国产一区二区三区大| 五台县| 亚洲中文字幕在线二页| 久久天天躁狠狠躁夜夜躁2012| 亚洲天堂在线观看完整版| 色噜噜狠狠成人综合| 亚洲精品国产综合久久一线| 久久亚洲精品成人综合网| 精品国产成人国产在线视| 少妇人妻精品无码专区视频| 自拍亚洲一区欧美另类| 日本黄色一区二区三区四区| 国产精品久久国产精麻豆99网站| 亚洲中文字幕精品第三区| 日韩欧美卡一卡二卡新区| 丝袜美腿亚洲综合第一页|