1

저는 장고에 대해 아주 새롭고, 지금까지 (django.contrib.auth.models)의 기본 사용자 모델에 추가 모델을 첨부하는 아주 기본적인 설정을했습니다. 내 accounts.models.py에는 다음 항목이 있습니다.사용자 또는 UserExtenstion에 대한 Django 소유권 외래 키

class UserExtension(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    # more code 

또한 소유자를 지정해야하는 다른 모델도 있습니다. 내 질문은 :

class Owned(models.Model): 
    # code 
    owner = models.ForeignKey(User) 
    # more code 

나 :

class Owned(models.Model) 
    # code 
    owner = models.ForeignKey(UserExtension) 
    # more code 

정말 감사 할 것 소유자를 의미하는 더 나은 (더 장고 틱, 더 읽기, 더 효율적으로, 더 유연한) 방법은 어느 당신이 그 접근법의 장단점을 언급한다면.

답변

0

첫 번째 옵션을 권하고 싶습니다. 사용자 모델은 소유 객체가 사용자 없이는 존재할 수 없으며 UserExtension없이 존재할 수 있다는 의미에서 중요하지 않은 모델입니다.

Django 1.5에서는 사용자 정의 사용자 모델을 만들 수 있으므로 UserExtension 클래스가 필요하지 않습니다. 자세한 내용은 documentation을 참조하십시오.

+0

Django 1.5에 대한 메모를 가져 주셔서 감사합니다. 어떻게 든 놓쳐 버렸을 것입니다.하지만 RC 일지는 모르겠지만 아마 그걸로 옮길 것입니다. 부수적으로, 내 경우 및 소유 객체에서 UserExtension이있는 사용자가 소유해야하며, 예를 들어 수퍼 유저 (순수 관리이며 UserExtension이없는 사용자)는 아닙니다. DB와 프로그램을 통해 이러한 경우가 발생하지 않도록 과도하게 고려하고 있습니까? – dmg

+0

나를 위해, 프로그래밍 방식으로 보안을 설정하면 대부분의 경우 충분합니다. 일반적으로 - 자신 만의 사용자 모델을 만드는 경우에도 - 좋은 이유가없는 한 다른 유형의 사용자 모델 (예 : 관리자 및 일반 사용자를위한 별도의 모델 필요)을 세분화하지는 않습니다. – Teisman

0

사용자 별 추가 기능 정보에 대해 UserProfile을 사용해보십시오. 방법을 보려면 blog을 확인하십시오. 그러면 사용자를 생성 할 때마다 UserProfile 객체를 생성하고 있다는 것을 확신 할 수 있습니다.

이제 User 또는 UserProfile에서 FK를했는지 여부가 소유 상태에서 수행중인 작업에 논리적으로 의존하는지 여부. 소유가 사용자의 데이터/필드와 함께 작동하는 경우 사용자의 FK; UserProfile의 데이터와 함께 작동하는 경우 UserProfile의 FK.