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の場合、現在日付を登録
この記事が気に入ったらサポートをしてみませんか?