Django 사용 팁들

링크

팁들

다대다 선택 폼필드

many to many 관계를 폼에서 쓸 때, ModelMultipleChoiceField 를 쓰게 되는데 이 폼요소가 쓰기가 좀 불편하다. ctrl 누르고 선택해야하는데 잘못해서 그냥 누르면 기존의 선택들이 다 날아감. django admin 에 있는 필드는 좋던데 말이지... 이 필드를 가져와 쓸수도 있다. django.contrib.admin.widgets.FilteredSelectMultiple 위젯 참고 -- yong27 2011-11-24 17:53:12

짧은 팁들

원격지의 컴퓨터에서 runserver를 확인하고 싶으면 아래의 명령 사용

python manage.py runserver 0.0.0.0:8080


template에서 모델객체 사용시, 메쏘드 호출에 "()"를 쓰지 않아야 한다.

다른 스크립트에서 django로 만든 프로젝트로 접근하는 방법

   1 import sys, os
   2 sys.path.append('/home/yong27/test/django') # upper directory of the project
   3 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 2007-09-11 19:02:29


newforms.form_for_model 을 써서 subclassing을 하면, 제대로 되지 않는다. 즉

   1 from django import newforms as forms
   2 IndividualForm = forms.form_for_model(Individual)
   3 CattleForm = forms.form_for_model(Cattle)
   4 class CattleIndividualForm(IndividualForm, CattleForm):
   5     pass

의 경우, CattleForm의 필드들은 출력되지 않는다. 찾아보니, http://code.djangoproject.com/ticket/3815 가 보고되어 있으나, 아직 적용되지 않고 있다. http://code.djangoproject.com/ticket/5050 에 첨부된 Patch를 적용하니 제대로 되긴 하다. 언제 적용되려나...

-- yong27 2007-09-05 15:02:08


template block으로 url을 쓸 경우, 해당 url의 RegularExpression이 (abc|def|gh) 로 되어 있을 경우, 역 파싱이 안된다. 관련 질답은 nabble#2977


Django admin 에서 foreign key 로 되어 있는 항목의 경우, 해당 내용을 볼 수 있는 링크가 존재하지 않는다. http://code.djangoproject.com/ticket/2569 Patch를 적용하면 되긴 한다. -- yong27 2008-03-17 14:01:44


newforms 의 ModelChoiceField 를 쓸 때, 기본적으로 선택하고자 하는 개체들의 __unicode__ 가 표시된다. User 의 경우, id 대신 get_full_name을 쓰고 싶다면, 다음 처럼 label_from_instance 메쏘드를 오버라이드하면 된다.

   1 from django import newforms as forms
   2 from django.utils.encoding import smart_unicode
   3 class UserFullNameChoiceField(forms.ModelChoiceField):
   4     def label_from_instance(self, obj):
   5         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 을 템플릿 컨텍스트로 사용할 때 주의할 것. 참고 -- yong27 2008-11-08 10:50:23

DjangoTips (last edited 2011-11-24 17:59:46 by 203)

web biohackers.net