2009-12-17 3 views
0

나는 Gender info를 포함한 Profile 모델을 만들었습니다.Django의 forms.py에 로그인 한 사용자 정보를 얻는 방법

class RegistrationForm(forms.ModelForm): 
dorms = Dorm.objects.filter(gender='M') 
pref1 = forms.ModelChoiceField(queryset=dorms, empty_label=None) 
... 
class Meta: 
    model = Registration 
    exclude = ('user') 
: 이제

class Registration(models.Model): 
user = models.ForeignKey(User) 
pref1 = models.ForeignKey(Dorm, related_name="pref1",verbose_name=u"Preference 1",null=True) 
... 
friend1 = models.CharField(u"Friend 1", max_length=15,blank=True) 

class Dorm(models.Model): 
name = models.ForeignKey(Building) 
gender = models.CharField(u"Gender", max_length=1, blank=True, choices=GENDER_CHOICES) 

, 나는이 같은 forms.ModelForm이 등록 모델에 대한 양식을 생성하는 것을 시도하고있다 : 모델과 같이 기숙사 및 등록 (사용자 등록을 위해 사용되지 않음)라고도 있습니다

두 번째 줄에서 알 수 있듯이 기숙사에 하드 코딩 된 성별 값 M을 쿼리하고 있습니다. 하드 코드 된 값 대신 사용자의 성별을 가져와 해당 성별 정보가있는 데이터베이스를 쿼리해야합니다.

설명서를 검색했지만 아무것도 찾을 수 없습니다. 너 나 좀 도와 줄 수있어? 어떻게 Django Forms에서 로그인 한 사용자의 프로필 정보를 알 수 있습니까?

답변

4

그래서는 "form_factory는"아마 가장 좋은 방법입니다 초기화 기능 돌아온다의 일종을 사용하지 않고.

def RegFormFactory(user) 

    dorms = Form.objects.filter(gender = "user.gender") 
    class _RegistrationForm(forms.ModelForm): 
     pref1 = forms.ModelChoiceField(queryset = dorms, empty_label=None) 
     class Meta: 
      model = Registration 
      exclude = ('user') 

    return _RegistrationForm 

는 사용

formclass = RegFormFactory(user) 
form_inst = formclass() 
... 
form_inst = formclass(request.POST) 

이 여기 블로그 포스트에 아주 잘 설명되어 So you want a dynamic form.

+0

분명히 "user.gender"를 사용자가 성별을 얻는 데 사용하는 방법으로 바꿉니다. – JudoWill

+0

감사합니다. 정말 도움이되었습니다. – yigit

2

제임스 베넷은 완벽하게 당신이 필요로 설명해야이 블로그 포스트를 작성했습니다 : So you want a dynamic form

관련 문제