본문 바로가기

728x90
반응형

Python

(100)
Django admin: Register all models # Django admin page에 모든 모델 등록 django.apps.apps.get_app_config.get_models 이용 * get_app_config("APP NAME") 그 이후 for 문으로 admin.site.register에 등록 from django.contrib import admin from django.apps import apps model_list = apps.get_app_config('books').get_models() for model in model_list: admin.site.register(model)
Django not null CharField objects.create # not null 임에도 object가 생성되는 경우 # unpack # ** Django에서는 아래와 같이 꼭 입력을 받아야하는 CharField에 대해 null=True 조건을 주지 않고 생성합니다. (not null 이 default) models.py class CharTest(models.Model): a = models.CharField(max_length=10) b = models.CharField(max_length=10) 그런데 null=True를 주지 않은 not null 상태인데 값을 안받고 DB에 데이터가 생기는 경우가 있습니다. 어떤 경우인지 살펴보도록 하겠습니다. 아래와 같이 POST 요청으로 a를 받아서 object를 생성해보겠습니다. test.html {% csrf_token %} send 아래와 같이 하고 123을 입력해서 POST 요청을 해보겠습니다..
Django app 위치 변경 # + 생성 Django로 프로젝트를 진행하다 보면, static, template 디렉토리들과 django로 만든 app들을 분리해서 정리할 필요성을 느낄때가 있습니다. django-admin startapp 명령어를 통해 생성된 app들만 따로 모아서 분류하는 방법을 알아보겠습니다. django_apps 디렉토리를 만들어서 django-admin startapp 명령어를 통해 만들어진 users app을 django_apps에 이동시키는 예로 설명하겠습니다. 1) settings.py - INSTALLED_APPS 설정 INSTALLED_APPS = [ 'django_apps.users', ] 'users' -> 'django_apps.users'로 변경 2) django_apps.users의 apps.py 변경..
Django ORM Query: ForeignKey로 연결된 필드 filter Django는 query문을 Django만의 문법으로 편하게 쓸수 있는 ORM Query를 제공 다른 테이블에 두고 연결해서 쓰는 ForeignKey나 ManyToMany field ForeignKey와 ManyToMany의 몇가지 사용 예제를 정리 ForeignKey 등을 models.py에서 설정할 때, 호출할 때 이름으로 related_name 으로 별도 설정을 할 수 있습니다. 하지 않으면 호출할 때 default로 선언한 ForeignKey에 대해서 _set의 형태로 호출해서 씁니다. 예를 들어 Class Book(models.Model): book = models.CharField() author = models.ForeignKey("Author", on_delete=models.CASCADE..
Django Template, render_to_string # backend에서 data 받기 #render_to_string #loader Ajax를 통해서 HTTP통신을 하는 경우 backend에 request를 보내고 거기에 대한 frontend에서 response를 받고, reponse 안에 data를 담아올 수 있습니다. 받아온 data를 화면 전환 없이 특정 html 부분만 바꿀때 Ajax를 많이 활용합니다. 경우에 따라서는 화면 전체를 다른 페이지로 전환을 하면서, data를 backend에서 받아오고 싶을 수 있습니다. Django template의 경우 context에 담아서 render해 줄 경우 html에 바로 뿌려줄 수 있지만, 데이터를 받아서 데이터 자체를 활용하기가 수월하지 않습니다. 즉, 원하는 것은 다음과 같은 상황입니다. 1) 페이지 전환을 특정 html로 완전히 바꿔주고 2) context도 활용하면서 3) a..
sort # 복수의 값으로 정렬할 때 세가지 이상의 값으로 이루어진 list 또는 튜플이 있을 때, 첫번째 값으로 먼저 정렬, 두번째 값으로 그 다음 정렬, 세번째 값으로 정렬을 순차적으로 적용하려면 sample_list = [(1,2,3), (2,5,3), (2,5,1), (2, 3, 10)] sample_list.sort(key=lambda x: [x[0], x[1], x[2]]) sample_list.sort(key=lambda x: [x[0], x[1], x[2]], reverse=True) # 전체가 뒤집힌다. # x[0] 기준으로는 오름차순 (default) # x[1] 기준으로는 내림차순으로 정렬하고 싶다면 sample_list.sort(key=lambda x: [x[0], -x[1]])
이미지 업로드: Django ImageField # Ajax Django 파일이 저장될 디렉토리와, 그 디렉토리를 가리킬 URL 설정 settings.py import os MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' urls.py from django.conf import settings from django.conf.urls.static import static urlpatterns = [ ... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) Pillow 설치 pip install pillow pillow를 설치 하지 않으면 아래 모델 생성에서 ImageField를 사용하지 못하는 에러가 발생 model 생성 fro..
Django Template filter: {% with %} Django template에서 필터와 필터를 중복해서 써야되는 경우들이 있다. 예를 들어서 mathfilters를 이용해서 연산을 하고, 거기에 특정 리스트의 길이를 더하고 싶을때 |length 필터를 더해줘야 하는데, 이럴 때 원하는 대로 작동을 안한다. 그때 {% with %} 로 원하는 값을 먼저 뽑아와서 용해주면 된다 example 1) {{commits.number|mul:3|add:commits|length}} # X {% with commits|length as commits_length %} # O {{commits.number|mul:3|add:commits_length}} {% endwith %} example2) {% with name|add:"Kim" as re_name %} {%..

728x90
반응형