上級者向け
【Django】DurationFieldのフォームの最適解を考えてみる【JSを使うか、Django側で制御するか】
【Django】モデルを使用したフォームクラスで、required属性を付与する
モデルを使用したフォームクラスは、モデルの制約に依存する。 そのため、モデルの制約がゆるくても、フォームクラスで引き締めたい場合、別途対策が必要になる。 フォームクラスにrequired属性を付与する class TopicCategoryForm(forms.ModelForm): class Meta: model = Topic fields = [ "category" ] #TODO:categoryの入力を必須化させる def __init__(self, *args, **kwargs): super(TopicCategoryForm, self).__init__(*args, **kwargs) self.fields['category'].required = True コンストラクタをオーバーライドすれば良いそうだ。 参照元: https://stackoverflow.com/questions/44810064/form-required-field-in-django-model-forms ...【Django】ManyToManyFieldにはフィールドオプションvalidatorsは効果なしなので、フォームクラスに追加のバリデーションを【多対多は特殊】
ManyToManyFieldにはvalidatorsフィールドオプションは通用しない。 そのため、モデル側から何らかの制約を課すことはできない。 だから、フォームクラスに追加のバリデーションを書き込む。 今回はManyToManyFieldのタグを2個までとするバリデーションを追加する。 モデル from django.db import models from django.conf import settings from django.utils import timezone class Tag(models.Model): name = models.CharField(verbose_name="タグ名 ...【Django】ManyToManyFieldで検索をする方法、追加・削除を行う方法【多対多はクエリビルダの検索は通用しない】
多対多の検索をする テンプレート まずは、テンプレート。検索フォームを作る。チェックボックスを使う。 <form action="" method="get"> <div> {# TODO:チェックしたタグであるかを判定するには、カスタムテンプレートタグを使うしかない #} {# 参照: https://stackoverflow.com/questions/34050150/django-templates-get-list-of-multiple-get-param#} {# TODO: この場合はcontextプロセッサーを使うと言う方法も考えられる。 #} {# https://noauto-nolife.com/post/django-context-processors/ #} {% for tag in tags %} <label><input type="checkbox" name="tag" value="{{ tag.id }}" {% tag_checked request tag.id %}>:{{ tag.name }}</label> {% endfor %} </div> <div class="input-group"> <input class="form-control" type="text" name="search" placeholder="キーワード検索&quo ...【Django】Django4.0以上はsettings.pyにて、CSRF_TRUSTED_ORIGINSにオリジンを指定しないとPOSTリクエスト時に403Forbiddenになる
背景 下記記事に倣って、EC2に独自ドメインを指定して、デプロイを完了させた。 【AWS】EC2にムームドメインで取得した独自ドメインを割り当て、HTTPS通信を行う【Route 53 + Certificate Manager + ロードバランサ(ELB)】 その後、POSTメソッドのリクエストを送信する際、どう頑張ってもCSRF検証に失敗したというエラーが出てしまう。 CSRF Failed: Referer checking failed - https://*********************.com does not match any trusted origins. これはなぜか。どう対策をすれば良いのかをまとめてみた ...【Django】FontAwesomeで星のアイコンを使ったレビューの投稿と表示
最終的にこのようになる。 今回はテンプレートのwithとcenterは不使用とした。 そして、5つ星の内、4つ星でレビューした場合、空の星を1つ描画する仕様に仕立てた。 モデル from django.db import models from django.core.validators import MinValueValidator,MaxValueValidator MAX_STAR = 5 class Review(models.Model): comment = models.CharField(verbose_name="コメント",max_length=500) star = models.IntegerField(verbose_name=&qu ...【Django】モデルに計算可能な時間を記録する【勉強時間・筋トレ時間の記録系ウェブアプリの作成に】【DurationField】
【Django】Cookieをサーバーサイドで操作する
【Django】カレンダーを更に改良する