Django ModelForm を書くときに気にしたいポイント
投稿日: 2026/01/19
更新日: 2026/01/19
更新日: 2026/01/19
概要
ModelForm 書いている時にこうした方が楽だよねと思った備忘録
Model名を連呼しない
from django import forms
from .models import Hoge, Category
class HogeCreateForm(forms.ModelForm):
class Meta:
model = Hoge
fields = (
# なんらか
)
name = forms.CharField(
label="名称"
)
category = forms.ModelChoiceField(
label="カテゴリー",
queryset=Category.objects.filter(id__in=Hoge.objects.exclude(…).values_list('id', flat=True) # <- A
)
def clean_name(self):
name = self.cleaned_data["name"]
is_exists = Hoge.objects.filter(name=name).exists() # <- B
if is_exists:
# なんらかの処理
そのモデル内を呼び出してバリデーションを書いてる時にと上部Aと書いてないでしょうか。