라벨이 django인 게시물 표시

Django + Postgresql에서 duplicate key value violates unique constraint 오류

0. 환경 - Python 3.7 - Django 1.11 - Postgresql 9.6 Django 관리자 페이지에서 row를 추가하려니 "duplicate key value violates unique constraint"오류가 발생했다. http://searene.me/2016/01/10/django-db-utils-IntegrityError-duplicate-key-value-violates-unique-constraint/  이 페이지 참조해서 sequence를 바꿔주었다. 1. 데이터베이스 접속   \list로 데이터 베이스 이름 확인 후 \connect [데이터베이스이름] 으로 수정할 데이터베이스에 접속한다. 2. id 최댓값 확인   sequence의 마지막 값(=해당 테이블의 마지막 id)는 아래 명령어로 확인할 수 있다. SELECT last_value FROM [sequence이름]; sequence이름은 보통 [테이블이름]_id_seq이고, django에서 만들어주는 테이블 이름은 [앱이름(소문자)]_[모델이름(소문자)]이니까 보통은 [앱이름]_[모델이름]_id_seq로 찾으면 된다. 처음 테이블을 만든 후 모델이름을 수정해도 sequence이름까지 바뀌진 않으니 아래 명령어로 정확히 확인해보자. SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; sequence의 last_value가 해당 테이블의 마지막 id가 아니면 sequence를 수정해야 한다. 3. sequence 수정 ALTER SEQUENCE [sequence이름] RESTART WITH [마지막id+1];

Graphene-django 정리

1. Model의 related_name으로 가져오려면   예를 들어 ItemModel과 SubItemModel 모델이 있고 SubItemModel에서 item = models.ForeignKey(ItemModel, related_name='SubItems')  처럼 정의했다면, schema에서 SubItem(이름은 상관없다. 모델을 Query 클래스에서 가져오기 위한 클래스)을 만들어야 Item 안에서 related_name으로 찾아올 수 있다. 실제로 SubItem을 Query 클래스에서 사용하지 않아도 만들어야 한다. 2. Self reference   schema의 어떤 클래스에서 같은 클래스를 리턴하는 쿼리는 사용할 수 없다. 같은 클래스를 리턴하고 싶다면 같은 모델을 참조하는 다른 클래스를 만들어야 한다. 예를 들면 이렇다. class Item(DjangoObjectType):   class Meta:     model = ItemModel   children = graphene.List(_Item)    # children = graphene.List(Item)은 안된다.      resolve_children(self, info, **kwargs):     return ... class _Item(DjangoObjectType):   class Meta:     model = ItemModel 3. graphene.JSONString 타입과 한글   리턴 타입이면 리턴 시 자동으로 json.dumps를 해주고 인자로 받을때는 자동으로 json.loads를 해준다. 인자로 받을 때는 잘 모르겠는데 리턴할 때 한글이 포함되어 있으면 깨진다. 따라서 리턴 타입을 graphene.String으로 하고 수동으로 json.d...

Nginx + django + uwsgi 에서 ERR_CONTENT_LENGTH_MISMATCH 오류

0. 환경 - ubuntu 16.04 - nginx 1.10(버전이 낮아서 그런 걸 수도 있다) - django 1.11 + uwsgi - chrome 75 1. 오류 상황  2MB 정도의 json string을 request parameter로 넘기니 ERR_CONTENT_LENGTH_MISMATCH(400) 에러 발생 2. 해결방법 1) nginx nginx 설정 파일을 아래처럼 수정.     location / {         uwsgi_pass [경로]         include uwsgi_params;         uwsgi_buffering off;     } 일반 proxy(proxy_pass)를 사용한다면 proxy_buffering off; 모든 포트의 location /마다 추가해야 한다. 2) django settings.py에 아래 줄을 추가 혹은 수정. (django 홈페이지에 따르면 기본값은 2.5MB) DATA_UPLOAD_MAX_MEMORY_SIZE = [원하는 값(Bytes)] 수정 후 nginx와 uwsgi를 재시작한다.