2011-01-03 2 views
4

내 장고 응용 프로그램에서 간단한 포스트 모델이 있습니다Django에 닉네임을 가진 익명 사용자를 저장하는 우아한 방법?

class Post(models.Model): 
    category = models.CharField(max_length=10, choices=choices) 
    message = models.CharField(max_length=500) 
    user = models.ForeignKey(User, editable=False) 

나는 익명 사용자가 닉 이름을 가진 게시물을 만들 수있는의 기능을 구현하고 싶습니다. 안타깝게도 django는 AnonymousUser의 인스턴스를 Post 클래스에 대한 외부 키로 저장할 수 없습니다.

사용자가없는 모든 게시물에 사용되는 익명 사용자 (id = 0 또는 가능한 한 음수)를 나타내는 db에 "더미"사용자 레코드를 추가하려고합니다. 그리고 그것이 존재한다면, nullable name 필드는 익명 사용자의 닉네임을 나타 내기 위해 사용될 것이다.

이 솔루션은 나에게 약간 해로운 것처럼 보입니다. 더 깨끗한 솔루션이 있습니까? 사용자가 익명 인 경우

답변

6

일부 세션 정보로 새 사용자를 식별 할 수있는 경우 일반적인 사용자 계정 (pro forma)을 작성하여 말할 수 있습니다. 플래그를 사용하여 휘발성으로 식별 할 수 있습니다 (정기적 인 유지 관리 정리로 이어질 수 있음).

세션 수명 동안 사용자가 실제로 등록하려고하는 경우 사용자 측에서 사용자 계정을 다시 사용할 수 있으며 사용자는 자신의 모든 데이터를 자신의 것으로 유지할 수 있습니다.

@slacy가 주석을 달고 @Dominique가 대답했습니다. 자신의 롤링 대신 기존 프로젝트를 살펴보십시오. 이 :

+0

이것은 django-lazysignup이 사용하는 것과 같은 접근법이며, 나는 당신 자신의 롤링 대신에 이것을 사용하는 것이 좋습니다. 캐주얼 사용자, 크롤러 및 모든 종류의 기타 무작위로 사용자 계정을 만들어서 (절대로 없어지지 않을 수도 있기 때문에) 조심하십시오. 장고 - lazysingup 꽤 잘 처리합니다. – slacy

0

당신은 NoneUserForeignKeyblank=Truenull=True를 추가하고 설정할 수 있습니다. 닉네임을 어딘가에 저장하면됩니다.

+0

사용자가 null 허용되면 조인을 계속할 수 있습니까? – TheOne

0

내가 장고에 새로입니다. 한 친구가 ForeignKey를 사용하지 말라고 말하면 CharField를 사용하는 것이 좋습니다. ForeignKey는 CharField보다 천천히 발생합니다. CharField는 사용자 정보를 검사합니다.

관련 문제