Djangoで個人的にハマった事。その1

Djangoを使ってWEBサービス開発中にハマった事をつらつらと。
個人的な備忘録になります。
沢山ある(ありすぎるf^^;)ので少しずつ纏めて次に活かそうかと。

1.入力Form定義(サンプル) Forms.py

Yyyyy_CHOICES = [    # 選択範囲が決まってる場合は定義してから使い回す
   (u'0', u'XXXX'),
   (u'1', u'YYYY'),
   (u'2', u'ZZZZ'),
   (u'3', u'AAAA'),
]

def createZZZZZNmDic():
   # 下記の@DbTableはDB名載せれないので勝手に作った。Models.pyに定義は必要。
   zZZZZZNmList = [(result, result) for result in DbTable.objects.filter(kkkkKbn='1', zzzzNm__isnull=False) # filterは条件を絞る。kkkkKbn='1'で、かつ、zzzzNmがNULLでない
                                                                   .exclude(zzzzNm='') # excludeで除外。zzzzNm=''を除く。
                                                                   .values_list('zzzzNm', flat=True) # values_listはリスト形式で取得。zzzzNmをリスト形式で。flat=True を付与する場合フィールドは1つしか指定ない。
                                                                   .order_by('zzzzNm').distinct()] # zzzzNmを昇順で、重複は省く
   zZZZZZNmList.insert(0,('','')) # 最初は値なし
   return zZZZZZNmList

class SearchForm(forms.Form):

   searchXXXXXNm = forms.CharField( # Textボックス
       initial='',       # 初期値
       label='XXXXX',    # ラベル
       required = False, # 必須かどうか
   )
   searchEntrDayFrom = forms.CharField( 
       initial='',
       label='Entry日(from)',
       required=False,  
       widget = datetimepicker.DatePickerInput( # Datatimepicker使用する場合
              format='%Y/%m/%d',
              options={
                   'locale': 'ja',
                   'dayViewHeaderFormat': 'YYYY年 MMMM',
                   'ignoreReadonly': True,
                   'allowInputToggle': True
               }
       ),
   )
   searchYyyyy = forms.MultipleChoiceField( # チェックボックス使用する場合
       label='YYYYY',
       widget=CustomCheckboxSelectMultiple, # カスタマイズしたチェックボックス使用する場合はここに定義
       choices=Yyyyy_CHOICES, # 上記で定義したリスト
       required=False,  
   )
   searchZzzzz = forms.ChoiceField( # プルダウンリスト使用する場合
       label='ZZZZZ',
       choices=createZZZZZNmDic(), # DBから取得した値をDic形式にして定義出来る
       required=False,  
   )
   

2.Model定義(サンプル) Models.py

# Aマスタ # 主キーは定義しなければidが主キーとして定義される。主キーはint
class A(models.Model):
   aNm     = models.CharField('A名', max_length=30, null=True) # Charフィールド、カラム名、最大30桁、nullは許容
   cDigits = models.CharField('C桁', max_length=4)
   dFlag    = models.CharField('削除フラグ', max_length=1, default=0) # 初期値0
   
   def __str__(self):
       return str(self.id) + '|' + self.aNm # 主キーとaNmカラム値をパイプ(|)区切りの文字列で返却。
       
# Bテーブル
class B(models.Model):
   bNm           = models.CharField('B名', max_length=30)
   a             = models.ForeignKey(A, on_delete=models.PROTECT, null=True) # 結合する場合はForeignKeyを使用。on_deleteは色々定義があるので調べる必要あり。
   lVsn          = models.IntegerField('バージョン', default=0) # int型はIntegerFieldを使用。
   createdAt    = models.DateTimeField('登録日', auto_now_add=True) # auto_now_addがTrueの場合、現在日付を登録
   

この記事が気に入ったらサポートをしてみませんか?