Django ModelForm を書くときに気にしたいポイント

投稿日: 2026/01/19
更新日: 2026/01/19
シェア:

URL copied!


概要

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と書いてないでしょうか。