自動化無しに生活無し

WEB開発関係を中心に備忘録をまとめています

  • Javascriptを使ってCSVを生成してダウンロードする

    CSVの生成とダウンロードであれば、あえてサーバーサイドでやらなくても、JavaScriptだけでことは足りる。 ソースコード 下記関数を実行すれば良い。 //現在スタックされているデータをCSVに変換してダウンロードする function create_csv(){ //文字列型で二次元配列のデータ data = [ ["A","B","C"], ["A1","B1","C1"], ["A2","B2","C2"], ["A3","B3","C3"], ["A4","B4","C4"], ] console.log(data); //作った二次元配列をCSV文字列に直す。 let csv_string = ""; for (let d of data) { csv_string += d.join(","); csv_string += '\r\n'; } //ファイル名の指定 let file_name = "test.csv"; //CSVのバイナリデー ...
  • Djangoでマイグレーションした時、『Auto-created primary key used when not defining a primary key type』と警告される場合の対策

    マイグレーションした時、下記のようなエラーが出る。 これは主キーを定義せず、自動的に作っているからである。 対策は下記をsettings.pyに追加するだけ。 DEFAULT_AUTO_FIELD='django.db.models.AutoField' 結論 主キーをUUIDにしている場合、発生しない警告文である。 Django-allauth等のDjango用のライブラリを使っている場合も、ライブラリの中にモデルが埋まっており、対策をしない限り、このような警告文が出る。 参照元 https://stackoverflow.com/questions/66971594/auto-create-primary-key-used-when-not-defining-a-primary-key-type-warning-in-dja ...
  • Djangoで主キーのリスト型を作り、合致するレコードを検索する【values_list + filter】

    例えば、複数のレコードのIDを検索して削除したい場合、下記のように記述する。 result = Topic.objects.filter(id__in=[1,2,3]) print(result) #idが1,2,3のデータが表示される。 これがリスト型のIDを使用したIN句である。 ちなみに、検索結果からIDのリストを作るには、下記のようにする。 result = list(Topic.objects.all().values_list("id",flat=True)) print(result) #[1, 2, 3, 4, 5, 6, 7, 8] idだけカラムを指定し、flat=Trueとすることで数値型のリストを作ることができる。 参照元 https://docs.djangoproject.com/en/3.2/ref/models/querysets/#in https://docs.djangoproject.com/en/3.2/ref/models/querysets/#values-list ...
  • Djangoで複数の外部キーに対応したフィールドの個数をカウントする【annotate(Count)+DISTINCT】

    • 作成日時:
    • 最終更新日時:
    • Categories: サーバーサイド
    • Tags: django
    【Django】外部キーに対応したデータの個数をカウントして表示【リプライ・コメント数の表示に有効】【annotate+Count】から annotateで外部キーで繋がっているコメント数をカウントしてフィールドを追加するには下記のようにすれば良い。 from django.db.models import Count Video.objects.annotate( num_comments=Count("videocomment") ).all().order_by("-dt") Countの第一引数に外部キーで繋がっているモデルクラスの小文字を文字列型で指定する。 しかし、マイリスト数、良いねの数など複数の外部キーで ...
  • DjangoをS3(AWS)ストレージ付きのHerokuにデプロイする

    Herokuで画像などのファイルをアップロードしたい時、別途ストレージを用意する必要がある。 特に代表的なのがAWSのS3をストレージとする方法。 既に解説記事があるので、S3の設定関係はDjangoをEC2(Ubuntu)、RDS(PostgreSQL)、S3の環境にデプロイをするを参照。 コードはDjangoで画像及びファイルをアップロードする方法から流用する。 Herokuデプロイの詳しい流れは、D ...
  • Djangoの管理サイト(admin)のフォームをforms.pyを使用してカスタムする【文字列入力フォームをtextareaタグで表現】

    • 作成日時:
    • 最終更新日時:
    • Categories: サーバーサイド
    • Tags: Django
    管理サイトのフォームはとりわけ何もしなければ、registerするモデルフィールドに依存する。 つまり、CharFieldの場合、inputタグtype="text"が自動的に管理画面のフォームに挿入される。 そのため、何もしなければフィールドオプションがmax_length=2000でも1行のテキストボックスでしか入力できない。 改行もできなければ全体を確認することも困難な管理画面 ...
  • DjangoをEC2(Ubuntu)、RDS(PostgreSQL)、S3の環境にデプロイをする

    DjangoをAWSのEC2(Ubuntu)にデプロイするの続編。EC2にデプロイした後、RDS、S3を使って、さらに大型のウェブアプリを動作させる。 本記事ではRDS(PostgreSQL)、S3のセットアップを中心に解説をする。基本的なEC2へのデプロイの流れは上記記事を確認するべし。 RDS(PostgreSQL)の設定 流れ ダッシュボードからRDSのインスタンス生成 セキュリティグループの設定(E ...
  • DjangoをAWSのEC2(Ubuntu)にデプロイする

    Herokuとは違ってサーバーが日本にもあり、なおかつ課金すれば大型のウェブアプリでもインターネット上に公開できる、それがAWS。 本記事ではAWSのEC2を使用し、デプロイ工程を解説する。 必要な知識 手順通りこなせばデプロイはできるが、作業の意味を理解するには、以下の知識を要する。 ネットワーク、データベース、セキュリティの知識 Linuxのコマンド(cp,mkdir,mv,cdなど) vimやnanoな ...
  • Pythonの角括弧と丸括弧の違い、丸括弧を使う場合の注意点【()と[]、タプル型とリスト型】

    Djangoの公式コードを流用したりしていると、よく見かける()を使ったコード。 これはタプルである。タプルはリスト型の[]と同じであるが、書き換えが不可能であるという点でリスト型とは異なる。 タプルを定義する時、下記のような書き方をしてしまうと、文字列型として判定されてしまう。 ("username") タプルとして扱ってもらいたいのであれば、下記のように記述する。カンマを忘れずに。 ("username",) タプルはリストと同様に扱えるので、後から ...
  • 【Django】カスタムユーザーモデルでユーザーブロック機能を実装させる【ManyToManyFieldでユーザーモデル自身を指定】

    本格的にSNS等のサービスを運用する時、必要になるのがユーザーフォロー(友達)やユーザーブロックの機能。理論上、いずれもユーザーとユーザーを多対多でつなぐことで実現できる。 今回はユーザーブロックの機能をカスタムユーザーモデルを使って再現する。 コードは【Django】allauthとカスタムユーザーモデルを実装した簡易掲示板を作る【AbstrastBaseUser】から流用している。 ユーザーモデル u ...