牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

Django

Django の models.CharField で choices の値を日本語で取得するメモ

毎回忘れるこれ… class ChainsawMan(models.Model): ATTRIBUTE_CHOICES = ( ('human', '人間'), ('devil', '悪魔'), ) attribute = models.CharField(choices=ATTRIBUTE_CHOICES ) get_{field_name}_display() でとれる >>> denji = ChainsawMan.objects.las…

Django で csv ダウンロード を utf8 の BOM 付きにするメモ

(django1.11, python3.7.x) open() 使わずに HttpResponse でやる場合のやつ import csv import io from django.http import HttpResponse def some_view(request): # Create the HttpResponse object with the appropriate CSV header. response = HttpResp…

Django の Templates で表示している画面のURLを取得するメモ

(Django2.2) urlの例 https://example.com/foobar/?foo=bar {{ request.get_full_path }} /foobar/?foo=bar {{ request.path }} /foobar/ {{ request.build_absolute_uri }} https://example.com/foobar/?foo=bar 参考リンク https://docs.djangoproject.com…

Django の BinaryField に manage.py shell でローカルのファイルをバイナリで入れるメモ

models.py manage.py shell 参考 (Python3.6.1, Django==1.11.20, PyMySQL==0.9.3) models.py class HogeFile(models.Model): binary_file = models.BinaryField() manage.py shell $ python manage.py shell_plus >>> from pathlib import Path >>> file = …

Django の annotate の集計で group by でハマったのでメモ

結果的に正解はこんな感じ from django.db.models import Count hoges = Hoge.objects.filter(fuga__regex='/mogera/[0-9]+/$').values('fuga').annotate(num_fuga=Count('fuga')).order_by('-num_fuga') [hoge['num_fuga'] for hoge in hoges] values 挟ま…

Django の views.pyで url の id とかパラメータとか取得する場合のメモ

よく忘れるんでメモ url の id とか url(r'^foo/(?P<pk>\d+)/$', FooView.as_view(), name='foo'), class FooView(TemplateView): template_name = 'index.html' def get_context_data(self, **kwargs): context = super(FooView, self).get_context_data(**kwar</pk>…

Django のクエリセットで gt や lt で日付を絞りこむメモ

混乱する時があるのでメモ 例 Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3), headline='Hello') pub_date__gt=datetime.date(2005, 1, 3) pub_date > 2005.1.3 pub_date が 2005.1.3より未来 pub_date__lt=datetime.date(2005, 1, 3) pub_…

Django の templates で簡単に class とか追加できるライブラリ django-widget-tweaks のメモ

名前忘れる django-widget-tweaks 使い方はリンク先で GitHub - jazzband/django-widget-tweaks: Tweak the form field rendering in templates, not in python-level form definitions. CSS classes and HTML attributes can be altered.

DjangoのwebサーバからapiサーバーにajaxでPOSTしたら『Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘*’』とかなった場合のメモ

(Django1.11.11 + django rest framework3.6.1, jquery-3.2.1) ajaxでPOSTした時のエラー クロスオリジン要求をブロックしました: 同一生成元ポリシーにより、%1$S にあるリモートリソースの読み込みは拒否されます (理由: CORS ヘッダー ‘Access-Control-Al…

mail.log の 日本語の Subject が文字化けしちゃって Python でデコードしたい場合のメモ

毎回忘れるんでメモ Django でメール送信内容の確認したい時に EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend' とかして log 見たら日本語の Subject が文字化けしちゃってるのを修復したい Subject: =?utf-8?b?44GT44KT44Gr44Gh44KP …

Django のフォームで BooleanField のチェックボックスのラベルもクリックできるようにするメモ

(Django1.11.11) class FooForm(forms.Form): is_enabled = forms.BooleanField(label="使用可能") .... <p> {{ form.is_enabled }} <label for={{ form.is_enabled.auto_id }}>{{ form.is_enabled.label }}</label> </p>

Django で最後に実行した ORM のSQL を確認するメモ

(Django1.11.11) >>> from django.db import connection >>> connection.queries >>> from foo.models import Bar >>> bars = Bar.objects.filter(name='foobar') >>> connection.queries[-1]['sql'] "SELECT `foo_bar`.`id`, `foo_bar`.`name`, `foo_bar`.`…

Django で設定の値をメソッドにデコレータつけて一時的に変更してみるメモ

>>> from django.conf import settings >>> print settings.LOGIN_URL "/login/" >>> from django.test.utils import override_settings >>> @override_settings(LOGIN_URL='/other/login/') ... def hoge(): ... print settings.LOGIN_URL ... >>> hoge() "…

Djangoのフォームでラジオボタン2つのhtmlを手動で書くメモ

この記事の続き form の bool_flg フィールドでの例 <form action="" method="post"> {% csrf_token %} {% for choice in form.bool_flg.field.choices %} </form>

Djangoのフォームでラジオボタン2つをトグル表示するメモ

(修正: 2018-02-05) 下記のようなラジオボタンボタン表示 from django import forms class HogeForm(forms.Form): bool_flg = forms.TypedChoiceField( initial=1, coerce=lambda x: bool(int(x)), choices=( (1, u'ON'), (0, u'OFF'), ), widget=forms.Radi…

Djangoでrunserverを起動しようとしたら「port is already in use」とかなっちゃう場合のメモ

コマンド忘れがちなのでメモ $ python manage.py runserver 8000 とかして Error: That port is already in use. とかなったら $ kill `lsof -ti tcp:8000` してコロス

Django のバッチ処理とかで out of memory で Killed になる場合の対処メモ

Django の reset_queries() を利用する from django.db import reset_queries for hoge in Hoge.objects.all(): hoge.fuga() reset_queries() 参考リンク FAQ: データベースとモデル | Django documentation | Django

Django のフォームで必須のフィールドのみ文字列を表示させるメモ

例 <form> {% csrf_token %} <p>名前{% if form.name.field.required %}<span class="required"> 必須</span>{% endif %}</p> {{ form.name }} </form> 参考 Tell if a Django Field is required from template - Stack Overflow

Django の annotate で集計してみるメモ

忘れるのでメモ (たぶんこうなるという例。動作確認はしてない。) from django.db import models class Author(models.Model): name = models.CharField() book = models.ForeignKey(Book) class Book(models.Model): name = models.CharField() pubdate =…

Django のモデルで各オブジェクトごとに指定した期間だけ取得できるようにしたいメモ

よく忘れるのでメモ models.py class News(models.Model): contents = models.TextField(u'本文') start_at = models.DateTimeField(u'開始日時', null=True, blank=True) end_at = models.DateTimeField(u'終了日時', null=True, blank=True) $ python mana…

Django のモデルで save() する時に指定したフィールドのみ更新するメモ

よく忘れるのでメモ product.name = 'Name changed again' product.save(update_fields=['name']) 参考 https://docs.djangoproject.com/ja/1.10/ref/models/instances/#specifying-which-fields-to-save

Django の templates で forms.py で設定した max_length とかのみ表示するメモ

忘れるのでメモ forms.py class ContactForm(forms.Form): username = forms.CharField(max_length=100) template/hoge.html <p>{{ form.fields.username.max_length }}</p> で <p>100</p> みたいな感じで表示できる

Django の確認フォームで localflavor を使った都道府県を templates で表示させるメモ

(django1.8, python2.7) templetes で {{ form.prefecture.value }} と書くと 東京 とかではなく tokyo とか表示される問題。 form.get_fieldname_display とか色々やって表示されなかったので この記事 を参考に templatetags 使ってやってみた (参考サイ…

Django templetes で入れ子になって複数のview から使われてる場合にどこの view から使われているか確認するメモ

{{ request.resolver_match.view_name }} こんなのもある request.resolver_match.url_name 参考 url - How to get the current urlname using Django? - Stack Overflow

Django Templates で文字列の一部ををマスクするメモ

カード番号のマスクとか Templates 内で完結させたい場合 {% spaceless %}{% for n in form.creditcard.data %}{% if forloop.counter < 5 or 12 < forloop.counter %}{{ n }}{% else %}*{% endif %}{% endfor %}{% endspaceless % form.creditcard.data の…

django-ckeditor の画像アップロードでハマったメモ

(django1.8, python2.7) 手順 ここ に書いてあるけど... Add ckeditor_uploader to your INSTALLED_APPS setting Add CKEDITOR_UPLOAD_PATH = "uploads/" setting Add (r'^ckeditor/', include('ckeditor_uploader.urls')), project's urls.py 略 Install pi…

Django で Modelからアプリ名とモデル名を取りたいメモ

例 appname/models.py >>> HogeModel._meta.app_label 'appname' >>> HogeModel._meta.object_name 'HogeModel' # or >>> HogeModel.__name__ 'HogeModel' 参考 http://stackoverflow.com/questions/3599524/get-class-name-of-django-model http://stackove…

Django の templates では無い場所で contrib.humanize の intcomma とか使いたい場合のメモ

templates の中だと <p>{{ 999999|intcomma }}<\p> とかで 999,999 と表示できるけど templates 以外で使いたい >>> from django.contrib.humanize.templatetags.humanize import intcomma >>> intcomma(100000000) u'100,000,000' ふつうにそのままな感じでい</p>…

Django で Rails の flash みたいなやつメモ

Rails Rails のユーザに簡易メッセージを表示するやつ。Controller で値を入れて View で表示。 ActionDispatch::Flash Django Django の場合は messages framework settings.py MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage' …

Django の ORM で昇順・降順ではなく指定したid順でデータ取るメモ

In [11]: foo_ids = [101, 19, 75] In [12]: order_ids = ','.join(["{id}".format(id=id) for id in foo_ids]) In [13]: foos = Foo.objects.filter(id__in=foo_ids).extra(select={'order_ids': "FIELD(id, {})".format(order_ids)}, order_by=['order_ids…