class Schedules(models.Model):
schedule_id = models.AutoField(primary_key=True)
rest_id = models.ForeignKey(Restaurant,null=True,on_delete=models.DO_NOTHING)
created_by = models.ForeignKey(CustomUser,on_delete=models.DO_NOTHING)
schedule_name = models.CharField(null=True,max_length=100,blank=True)
created_at = models.DateTimeField(auto_now_add=True)
# schedule_at = models.DateTimeField(null=True,blank=True)
schedule_condition = models.JSONField(null=True,blank=True)
# 약속 시간 취합을 위해 필요한 필드 수정 및 추가
schedule_start = models.DateTimeField(null=True,blank=True)
schedule_end = models.DateTimeField(null=True,blank=True)
is_meal = models.BooleanField(default=True)
class Participants(models.Model):
schedule = models.ForeignKey(
Schedules,
on_delete=models.CASCADE,
related_name="participants"
)
participant = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete= models.SET_NULL,
null=True,
blank=True
)
명시적 중간 모델(Participants)을 사용하고 있는데,
추가 필드가 없고 단순한 스케줄-사용자 관계만 있다면
Django의 ManyToManyField를 사용하는 게 더 간결할 수 있음
단, 아래 조건 중 하나라도 해당되면 명시적 중간 모델이 나음
• 향후 Participants 모델에 추가 필드가 들어올 가능성 있음 (예: 참여 승인 여부, 상태 등)
• 명확한 조회 제어가 필요함
• 비즈니스적으로 Participants 자체를 독립된 모델로 관리할 필요 있음
class Schedules(models.Model):
schedule_id = models.AutoField(primary_key=True)
rest_id = models.ForeignKey(Restaurant,null=True,on_delete=models.DO_NOTHING)
created_by = models.ForeignKey(CustomUser,on_delete=models.DO_NOTHING)
schedule_name = models.CharField(null=True,max_length=100,blank=True)
created_at = models.DateTimeField(auto_now_add=True)
# schedule_at = models.DateTimeField(null=True,blank=True)
schedule_condition = models.JSONField(null=True,blank=True)
# 약속 시간 취합을 위해 필요한 필드 수정 및 추가
schedule_start = models.DateTimeField(null=True,blank=True)
schedule_end = models.DateTimeField(null=True,blank=True)
is_meal = models.BooleanField(default=True)
participants = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="schedules_participated")
• Django가 자동으로 중간 테이블을 생성
• 예를 들어, schedules_schedules_participants라는 이름의 테이블이 생겨서,
스케줄 ID ↔ 유저 ID 관계를 저장
