2024年4月11日木曜日

Django モデルフォームではModelでblank=Falseにするとrequired=Trueになる

Djangoのモデルからフォームを作りました。

forms.pyのほうでこんな感じで required=Trueにしました。

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs['class'] = 'form-control'
            field.widget.attrs['required'] = True

こうすると、inputにrequiredが追加されます。

このrequiredをテンプレートで判定するため以下のように

{% for field in form %}
    {% if field.required %}必須{% endif %}
{% endfor %}

とすればOKかと思ったら、field.required がどうしてもTrueになりません。

以下を参照すると {% if field.field.required %} にしろと書いてある。

Tell if a Django Field is required from template

それでも field.field.required はFalseのままでだめでした。

さらに以下を参照すると

Django: Make certain fields in a ModelForm required=False

you ought to add blank=True to the corresponding model

The documentation says

If the model field has blank=True, then required is set to False on the form field. Otherwise, required=True.

とありました。モデルのフィールドを blank=False にしないとテンプレートでは required=True 判定しないようです。

結論としては以下となります。

  • 必須にしたいモデルのフィールドを blank=False にする
  • テンプレートでは
    {% for field in form %}
        {% if field.field.required %}必須{% endif %}
    {% endfor %}
    のようにする。


2024年4月3日水曜日

ffmpeg 一括操作のコマンド (Windowsの場合)

ffmpeg 一括操作のコマンドのメモです。Windowsの例です。


複数のMP4ファイルから静止画を1枚ずつ保存する

> for %i in (./*.mp4) do ffmpeg -i ./%~ni.mp4 -ss 0 -t 1 -r 1 -f image2 ./%~ni.jpg

※この例は動画の0秒から1秒の間で1つの画像を保存するコマンド



音声の削除
> ffmpeg -i 入力ファイル名 -vcodec copy -an 出力ファイル名

音声の一括削除(no_soundフォルダ内に出力)
> for %i in (./*.mp4) do ffmpeg -i ./%~ni.mp4 -vcodec copy -an ./no_sound/%~ni.mp4