utf8이 아니여서 계속 한글이 깨지는 현상이 발생했다
영어는 잘 인식하는 것 같다
https://security-guide.tistory.com/115
[MySQL] Docker-compose 사용 시 MySQL 한글 깨짐 현상 해결하기
command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --skip-character-set-client-handshake docker-compose.yml의 mysql 이미지를 받아올때 위 옵션을 붙여주면 된다. 이후 mysql 컨테이너에서 show variable
security-guide.tistory.com
이 블로그를 참고해서 docker compose.yml 을 변경했다 -> 어째서인지 나에게는적용이 안되었다..
그래서 아래와 같이 해결했다
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
my.cnf 파일을 생성하였고 위와 같이 채웠다
services:
db:
image: mysql:latest
container_name: mysql
restart: always
volumes:
- data:/var/lib/mysql
- ./my.cnf:/etc/mysql/conf.d/my.cnf
env_file:
- .env
ports:
- "3306:3306"
volumes 에 해당 파일을 연결해주었더니 해결되었다
또 직면한 문제..
잘못으로 유추되는 것
todos 파일 안의 migrations 안에 있는 모든 파일을 지워버렸다 (원래 __init__.py 를 제외한 모든 파일을 지우는 거라고 한다.. )
그래도.. 나름... docker compose 켜서 터미널에서 강제로 makemigrations 와 migrate를 진행했다..
그래서 결과..
backend-1 | Operations to perform:
backend-1 | Apply all migrations: accounts, admin, auth, contenttypes, sessions, todos
backend-1 | Running migrations:
backend-1 | No migrations to apply.
migrations 에선 잡힌다.
근데 문제는 mysql 테이블에서 보이지 않는다..
mysql> show tables;
+------------------------+
| Tables_in_onestep_demo |
+------------------------+
| accounts_user |
| auth_group |
| auth_group_permissions |
| auth_permission |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+------------------------+
8 rows in set (0.02 sec)
showmigrations 도 진행해봤는데.. 잘 나온다..
docker-compose exec backend python manage.py showmigrations todos
todos
[X] 0001_initial
python manage.py sqlmigrate todos 0001
--
-- Create model Todo
--
CREATE TABLE `todos_todo` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `content` varchar(255) NOT NULL, `category` varchar(7) NOT NULL, `start_date` date NOT NULL, `deadline` date NOT NULL, `created_at` datetime(6) NOT NULL, `updated_at` datetime(6) NOT NULL, `deleted_at` datetime(6) NULL, `parent_id_id` integer NULL, `user_id_id` bigint NOT NULL);
ALTER TABLE `todos_todo` ADD CONSTRAINT `todos_todo_parent_id_id_7176494b_fk_todos_todo_id` FOREIGN KEY (`parent_id_id`) REFERENCES `todos_todo` (`id`);
ALTER TABLE `todos_todo` ADD CONSTRAINT `todos_todo_user_id_id_8e4872ce_fk_accounts_user_id` FOREIGN KEY (`user_id_id`) REFERENCES `accounts_user` (`id`);
이것도 안됐다...
select * from django_migrations
-> ;
+----+--------------+---------------------------------------------------------------+----------------------------+
| id | app | name | applied |
+----+--------------+---------------------------------------------------------------+----------------------------+
| 1 | accounts | 0001_initial | 2024-07-05 13:52:42.063959 |
| 2 | contenttypes | 0001_initial | 2024-07-05 13:52:42.090672 |
| 3 | admin | 0001_initial | 2024-07-05 13:52:42.208831 |
| 4 | admin | 0002_logentry_remove_auto_add | 2024-07-05 13:52:42.213438 |
| 5 | admin | 0003_logentry_add_action_flag_choices | 2024-07-05 13:52:42.220833 |
| 6 | contenttypes | 0002_remove_content_type_name | 2024-07-05 13:52:42.255693 |
| 7 | auth | 0001_initial | 2024-07-05 13:52:42.388395 |
| 8 | auth | 0002_alter_permission_name_max_length | 2024-07-05 13:52:42.415625 |
| 9 | auth | 0003_alter_user_email_max_length | 2024-07-05 13:52:42.419194 |
| 10 | auth | 0004_alter_user_username_opts | 2024-07-05 13:52:42.422045 |
| 11 | auth | 0005_alter_user_last_login_null | 2024-07-05 13:52:42.425861 |
| 12 | auth | 0006_require_contenttypes_0002 | 2024-07-05 13:52:42.429240 |
| 13 | auth | 0007_alter_validators_add_error_messages | 2024-07-05 13:52:42.432684 |
| 14 | auth | 0008_alter_user_username_max_length | 2024-07-05 13:52:42.435705 |
| 15 | auth | 0009_alter_user_last_name_max_length | 2024-07-05 13:52:42.439924 |
| 16 | auth | 0010_alter_group_name_max_length | 2024-07-05 13:52:42.447444 |
| 17 | auth | 0011_update_proxy_permissions | 2024-07-05 13:52:42.451911 |
| 18 | auth | 0012_alter_user_first_name_max_length | 2024-07-05 13:52:42.455433 |
| 19 | sessions | 0001_initial | 2024-07-05 13:52:42.475314 |
| 20 | todos | 0001_initial | 2024-07-07 14:09:07.885764 |
| 21 | todos | 0002_todo_created_at_todo_deleted_at_todo_updated_at_and_more | 2024-07-08 09:12:44.948995 |
+----+--------------+---------------------------------------------------------------+----------------------------+
21 rows in set (0.00 sec)
이런방법이 있길래 id 20과 21을 지워줬다
mysql> select * from django_migrations;
+----+--------------+------------------------------------------+----------------------------+
| id | app | name | applied |
+----+--------------+------------------------------------------+----------------------------+
| 1 | accounts | 0001_initial | 2024-07-05 13:52:42.063959 |
| 2 | contenttypes | 0001_initial | 2024-07-05 13:52:42.090672 |
| 3 | admin | 0001_initial | 2024-07-05 13:52:42.208831 |
| 4 | admin | 0002_logentry_remove_auto_add | 2024-07-05 13:52:42.213438 |
| 5 | admin | 0003_logentry_add_action_flag_choices | 2024-07-05 13:52:42.220833 |
| 6 | contenttypes | 0002_remove_content_type_name | 2024-07-05 13:52:42.255693 |
| 7 | auth | 0001_initial | 2024-07-05 13:52:42.388395 |
| 8 | auth | 0002_alter_permission_name_max_length | 2024-07-05 13:52:42.415625 |
| 9 | auth | 0003_alter_user_email_max_length | 2024-07-05 13:52:42.419194 |
| 10 | auth | 0004_alter_user_username_opts | 2024-07-05 13:52:42.422045 |
| 11 | auth | 0005_alter_user_last_login_null | 2024-07-05 13:52:42.425861 |
| 12 | auth | 0006_require_contenttypes_0002 | 2024-07-05 13:52:42.429240 |
| 13 | auth | 0007_alter_validators_add_error_messages | 2024-07-05 13:52:42.432684 |
| 14 | auth | 0008_alter_user_username_max_length | 2024-07-05 13:52:42.435705 |
| 15 | auth | 0009_alter_user_last_name_max_length | 2024-07-05 13:52:42.439924 |
| 16 | auth | 0010_alter_group_name_max_length | 2024-07-05 13:52:42.447444 |
| 17 | auth | 0011_update_proxy_permissions | 2024-07-05 13:52:42.451911 |
| 18 | auth | 0012_alter_user_first_name_max_length | 2024-07-05 13:52:42.455433 |
| 19 | sessions | 0001_initial | 2024-07-05 13:52:42.475314 |
+----+--------------+------------------------------------------+----------------------------+
그 후에 migrate 를 실행해주니 반영 되었다!
mysql> show tables;
+------------------------+
| Tables_in_onestep_demo |
+------------------------+
| accounts_user |
| auth_group |
| auth_group_permissions |
| auth_permission |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| todos_todo |
+------------------------+
9 rows in set (0.00 sec)
또 생긴 문제..
어째서인지 user_id 가 안보인다.
class TodoSerializer(serializers.ModelSerializer):
user_id = serializers.ReadOnlyField(source="user_id.id")
content = serializers.CharField(max_length=255)
category = serializers.CharField(max_length=7)
start_date = serializers.DateField()
deadline = serializers.DateField()
parent_id = serializers.PrimaryKeyRelatedField(queryset=Todo.objects.all(), allow_null=True, required=False)
order = serializers.IntegerField(default=0)
is_completed = serializers.BooleanField(default=False)
class Meta:
model = Todo
fields = ['id', 'content', 'category', 'start_date', 'deadline', 'parent_id', 'user_id', 'order', 'is_completed']
ReadOnlyField 라고 작성한게 문제인 것 같아서 일단 찾아본다
https://velog.io/@hwisaac/DRF-Serializer-Fields
DRF: Serializer Fields
각각의 폼 클래스의 필드는 데이터의 유효성을 검사하는 것뿐만 아니라 데이터를 "클린징"하여 일관된 형식으로 정규화하는 역할을 합니다.— Django 문서(https://docs.djangoproject.com/en/stable/ref/forms/
velog.io
대략 유추한 바로는 값을 넣는 용이 아니라 그냥 불러오는 용이였나 보다
[TIL] DRF serializer에서 외래키 테이블의 필드 가져오기
Set up
medium.com
user_id = serializers.RelatedField(queryset=User.signup.all())
팀원분이 User.signup 으로 사용하시길래 사용해봤다. 어째서인지 된다..!
오늘은 여기까지..
'소프트웨어 마에스트로 > BackEnd(Django)' 카테고리의 다른 글
[백엔드] django serializer 관련 여러가지 요청사항 (0) | 2024.07.30 |
---|---|
[백엔드] django serializer (1) | 2024.07.24 |
[백엔드] nested serailizer, lexorank 적용기 2차.. (4) | 2024.07.22 |
[백엔드] lexoRank 공부하기 (0) | 2024.07.13 |
[백엔드] django test db관련 문제 (0) | 2024.07.12 |