2010-03-10 8 views
11

나는 같은 것을 할 싶습니다모델 필드의 기본값으로 현재 로그인 한 사용자를 할당하는 방법은 무엇입니까?

class Task(models.Model): 
    ... 
    created_by = models.ForeignKey(User, **default=[LoggedInUser]** blank=True, null=True, related_name='created_by') 

이 가능합니까? 나는 여기에서 작동하지 않는보기에서 request.user를 수행하는 것 외에, 로그인 한 사용자를 얻는 적절한 방법을 찾을 수 없었다.

PS_ 다른 방법으로 모델 데이터를 초기화 할 수 있다는 것을 알았지 만 이것이 가장 깨끗한 방법이라고 생각합니다.

+0

구문 강조 표시는 유감이지만 기본값을 말하고 싶습니다. – Nacho

답변

4

아니요, 이렇게하면 안됩니다. Django (그리고 Python)는 꽤 많이 이고, 값은이며, 이것은 좋은 것 (tm)입니다. 일반적으로 view(request)의 현재 사용자는 request.user입니다. 그런 다음이를 매개 변수로 여러 메서드/함수에 전달할 수 있지만 글로벌 user을 설정하려고하면 멀티 스레드 환경에서만 눈물이 생깁니다.

범퍼 스티커가 있어야합니다. Globals are Evil. 이것은 PHP에 대한 제 1 번 문제에 대한 좋은 아이디어를 줄 것입니다.

+0

충분합니다. 나는 그것이 신호로 작동하도록 할 수 있는지 알게 될 것이다. 나는 그 신호가 가장 좋은 방법 일 것이라고 생각한다. 감사합니다. – Nacho

23

관리 인터페이스 내에서이를 수행하려면 save_model 메소드를 사용할 수 있습니다. 예를 들어 아래를 참조

class List(models.Model): 
    title = models.CharField(max_length=64) 
    author = models.ForeignKey(User) 

class ListAdmin(admin.ModelAdmin): 
    fields = ('title',) 
    def save_model(self, request, obj, form, change): 
     obj.author = request.user 
     obj.save() 
0

사용 ModelForm 경우, 다음과 같은 특별한 필드의 기본값을 채 웁니다. 소유자 파일은 사용자 이름의 charfield입니다.

로그인하면 소유자 정보가 현재 사용자의 이름임을 알 수 있습니다.

+1

Django Forms의'initial' 인수도보십시오. [이 답변] (http://stackoverflow.com/a/604325/310441)에서 설명했습니다. – Owen

+0

@Owen 더 간결하게 말씀해 주셔서 감사합니다. – WeizhongTu

관련 문제