2017-12-16 7 views
0

django 사용자로부터 상속 된 사용자 정의 된 사용자 클래스를 만들려고합니다. 문제는 이미 데이터베이스에서 삭제할 수없는 일부 사용자를 보유하고 있으며 사용자에게 외래 키가있는 다른 클래스 (보고서라고 가정 해 봅시다)입니다. 내 질문은 : 새 사용자 클래스를 만들고 이전 데이터를 유지할 수있는 방법이 있습니까?
미리 감사드립니다.django에서 이미 사용중인 데이터베이스와 함께 새 하위 클래스 사용

+1

정말 두 가지 사용자 클래스가 필요합니까? 또는 속성 일 수 있습니다. 사용자에 대한 역할이 충분합니다. 너는 무엇을 목표로하고 있니? – niklas

+0

@niklas 사용자가 여러 개의 이메일을 저장할 수 있기를 바랍니다. 지금 내 대안은 ExtraEmails 클래스가 있고 그 클래스에 외래 키가 사용자 모델 인 다 대일 관계를 사용하고 있습니다. 덕분에 –

답변

1

User으로 다시 연결되는 관련 모델을 만들 수 있습니다. 다른 유형의 사용자가있는 경우이 방법이 일반적이지만 다른 사용 사례도 있습니다. 당신은 또한해야 할 일은

class SpecialUserProfile(models.Model): 
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.SET_NULL) 
    special_feature = models.CharField(max_length=100, null=True, blank=True) 
    etc. 

는 새 사용자가 User에 추가 될 때,이 프로필을 만드는 것입니다. post_save 신호로이를 수행 할 수 있습니다.

@receiver(post_save, sender=User) 
def create_special_user_profile(sender, instance, created, **kwargs): 

    if created: 
     SpecialUserProfile.objects.create(user=instance) 

당신은 command로 사용자를 기존 또는 작성하고 User 기존 사용자에 대해이 작업을 수행 임시 기능을 실행하기위한 프로파일을 만들 수 있습니다.

user.specialuserprofile.special_feature의 의미로 ORM을 사용할 수 있습니다.

User 모델을 기본으로 사용하면 빌트인 사용자와 관련된 기능이 엉망이되지 않으며 새로운 사용자와 기존 사용자에 대해 생각하지 않고 추가로이 새로운 모델을 사용할 수 있습니다 사용자에 대한 정보.

+0

. 그것은 현명한 접근이며, 지금 당장하고있는 일입니다. 그러나 사용자를 SpecialUserProfile.user로 변경하면 코드에서 변경해야합니다. 그래서 데이터를 잃지 않고 User 모델을 상속 할 수있는 방법이 있는지 궁금합니다. –

+1

예, 프로젝트의 기본 'User' 모델을 나중에 변경하는 것은 어렵습니다. 이것은 가장 우아한 해결책입니다. 이런 이유로 [AbstractUser']를 서브 클래 싱하여 커스텀'User' 모델을 생성 할 것을 권장합니다 (https://docs.djangoproject.com/en/dev/topics/auth/customizing/#using-a-custom-user). -model-when-starting-a-project)를 시작합니다. 그러나 우리 모두는 실수를하거나 잊어 버립니다. 나는 적어도 두 번 잊었다는 것을 안다. – Borut