장고에서 마이그레이션과 마이그레이트를 하면 일반적으로 데이터가 동기화가 되어야한다...
python manage.py makemigrations
python manage.py migrate
이렇게 해도 안 될 경우..
python manage.py makemigrations users
python manage.py makemigrations tasks
폴더별로 마이그레이션을 해주면 저번엔 되었었는데 이번엔 안된다..
다시 해도 안된다..
앱 구조를 잘못짰나?..
그래서 일단 급한 마음에.. 쿼리로 들어가서 확인을 해보았다..
python manage.py shell
>>> from tasks.models import Task
>>> from tasks.models import SubTask
>>> from tasks.models import Team
>>> from users.models import User
>>> Team.objects.all()
<QuerySet []>
흠.. 왜 데이터에 아무것도 안들어가있을까..
Team 데이터만 안들어간다..
Team을 나눠서 그런걸까...
그래서 강제로 넣는 시도를 했다..
for team_name in User.TeamChoices.values:
... Team.objects.get_or_create(name=team_name) -> 여기서 탭하고 작성해야함
그랬더니
(<Team: Team1>, True)
(<Team: Team2>, True)
(<Team: Team3>, True)
(<Team: Team4>, True)
(<Team: Team5>, True)
(<Team: Team6>, True)
(<Team: Team7>, True)
>>> Team.objects.all()
<QuerySet [<Team: Team1>, <Team: Team2>, <Team: Team3>, <Team: Team4>, <Team: Team5>, <Team: Team6>, <Team: Team7>]>
이번엔 들어갔다...
왜지?
일단 내 앱은 users / tasks 로 나뉘어있다.
users 앱
class User(AbstractBaseUser, PermissionsMixin):
class TeamChoices(models.TextChoices):
Team1 = "Team1", "Team1"
Team2 = "Team2", "Team2"
Team3 = "Team3", "Team3"
Team4 = "Team4", "Team4"
Team5 = "Team5", "Team5"
Team6 = "Team6", "Team6"
Team7 = "Team7", "Team7"
username = models.CharField(max_length=50, unique=True)
USERNAME_FIELD = "username"
REQUIRED_FIELDS = []
team = models.CharField(
max_length=50,
choices=TeamChoices.choices,
default=TeamChoices.Team1,
)
objects = CustomUserManager()
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now=True)
def __str__(self):
return self.username
tasks앱
from django.db import models
from users.models import User
class Team(models.Model):
name = models.CharField(
max_length=50,
choices=User.TeamChoices.choices,
unique=True,
)
def __str__(self):
return self.name
class Task(models.Model):
create_user = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name="create_user",
)
title = models.CharField(max_length=255)
content = models.TextField()
is_complete = models.BooleanField(default=False)
completed_date = models.DateTimeField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
class SubTask(models.Model):
task = models.ForeignKey(
Task,
on_delete=models.CASCADE,
related_name="subtasks",
)
team = models.ManyToManyField(
Team,
related_name="subtasks_teams",
blank=True,
)
subtask_create_user = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name="subtask_create_user",
)
sub_title = models.CharField(max_length=255, blank=True, null=True)
sub_content = models.TextField(blank=True, null=True)
is_complete = models.BooleanField(default=False)
completed_date = models.DateTimeField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)
def __str__(self):
team_names = ", ".join([team.name for team in self.team.all()])
return f"{self.task.title} - Teams: {team_names}"
모델의 구조를 잘못 짠거일까...
흐음... 이 부분에서 쿼리로 넣는다고 생각하기까지가 좀 오래 걸렸다...