[[Django]] 사용 팁들 <> == 링크 == * [[http://www.amitu.com/blog/2007/july/django-extending-user-model/|Extending User model]] * [[http://www.b-list.org/weblog/2007/nov/27/performance/|Django performance tips]] * [[http://superjared.com/projects/static-generator/|Static generator]] : 10배이상 빠른 정적파일 서비스 * [[Blog:303|Django newforms tip: 폼요소에 같은 이름 여러번 사용하기]] * DjangoAndSsl * [[http://ericholscher.com/blog/2008/oct/5/django-tips/|Big list of Django tips (and some python tips too)]] == 팁들 == === 다대다 선택 폼필드 === many to many 관계를 폼에서 쓸 때, !ModelMultipleChoiceField 를 쓰게 되는데 이 폼요소가 쓰기가 좀 불편하다. ctrl 누르고 선택해야하는데 잘못해서 그냥 누르면 기존의 선택들이 다 날아감. django admin 에 있는 필드는 좋던데 말이지... 이 필드를 가져와 쓸수도 있다. django.contrib.admin.widgets.!FilteredSelectMultiple 위젯 [[http://jayapal-d.blogspot.com/2009/08/reuse-django-admin-filteredselectmultip.html|참고]] -- [[yong27]] <> == 짧은 팁들 == 원격지의 컴퓨터에서 runserver를 확인하고 싶으면 아래의 명령 사용 {{{ python manage.py runserver 0.0.0.0:8080 }}} ---- template에서 모델객체 사용시, 메쏘드 호출에 "()"를 쓰지 않아야 한다. 다른 스크립트에서 django로 만든 프로젝트로 접근하는 방법 {{{#!python import sys, os sys.path.append('/home/yong27/test/django') # upper directory of the project os.environ['DJANGO_SETTINGS_MODULE'] = 'antifungal.settings' # project.settings }}} ---- [[Sqlite]]를 쓰면서 ModPython으로 서비스를 시작하면 다음에러를 만난다. {{{ OperationalError: SQL logic error or missing database }}} sqlite db의 permission을 수정해준다. ---- offline에서 문서를 읽고 싶으면 다음처럼... {{{ wget http://www.djangoproject.com/documentation/ -r -np -k }}} ---- Model.objects.get(pk=model_id) 로 데이터를 가져올 때 해당 id의 내용이 없으면, !DoesNotExist 예외가 발생한다. 이걸 Http404 예외로 바꾸고, template 상위디렉토리에 404.html 파일을 만들어 놓으면, 해당 데이터가 없을 때, 404.html 템플릿이 출력된다. 재밌는건 settings 에서 Debug=True 로 놓으면, django error 페이지가 출력된다. -- [[yong27]] <> ---- newforms.form_for_model 을 써서 subclassing을 하면, 제대로 되지 않는다. 즉 {{{#!python from django import newforms as forms IndividualForm = forms.form_for_model(Individual) CattleForm = forms.form_for_model(Cattle) class CattleIndividualForm(IndividualForm, CattleForm): pass }}} 의 경우, CattleForm의 필드들은 출력되지 않는다. 찾아보니, http://code.djangoproject.com/ticket/3815 가 보고되어 있으나, 아직 적용되지 않고 있다. http://code.djangoproject.com/ticket/5050 에 첨부된 [[Patch]]를 적용하니 제대로 되긴 하다. 언제 적용되려나... -- [[yong27]] <> ---- template block으로 url을 쓸 경우, 해당 url의 RegularExpression이 (abc|def|gh) 로 되어 있을 경우, 역 파싱이 안된다. 관련 질답은 [[http://www.nabble.com/Question-about-%7B--url---%7D-t4164661.html|nabble]]과 [[http://code.djangoproject.com/ticket/2977|#2977]] ---- Django admin 에서 foreign key 로 되어 있는 항목의 경우, 해당 내용을 볼 수 있는 링크가 존재하지 않는다. http://code.djangoproject.com/ticket/2569 [[Patch]]를 적용하면 되긴 한다. -- [[yong27]] <> ---- newforms 의 !ModelChoiceField 를 쓸 때, 기본적으로 선택하고자 하는 개체들의 {{{__unicode__}}} 가 표시된다. User 의 경우, id 대신 get_full_name을 쓰고 싶다면, 다음 처럼 label_from_instance 메쏘드를 오버라이드하면 된다. {{{#!python from django import newforms as forms from django.utils.encoding import smart_unicode class UserFullNameChoiceField(forms.ModelChoiceField): def label_from_instance(self, obj): return smart_unicode(obj.get_full_name()) }}} ---- Django 새버전 어느쯤에서인가 One-to-one 관계에 복수개의 모델을 적용시킬 수 있도록 변경되었나보다. 따라서, One-to-one 테이블에서도 자체 id가 사용되기 시작했다. 여기까지는 좋은데, 이로인해 기존의 코드가 동작하지 아니함. [[MySQL]]이라면 다음의 방법으로 테이블 스키마 변경 {{{ alter table tablename drop primary key; alter table tablename add id int(11) auto_increment primary key first; update tablename set id=one_to_one_colume_id; }}} ---- collections.defaultdict 을 템플릿 컨텍스트로 사용할 때 주의할 것. [[http://python.kr/viewtopic.php?p=65392#65392|참고]] -- [[yong27]] <>