2009-12-17 155 views
0

我已經創建了一個包含性別信息的個人檔案模型。還有模型稱爲宿舍和登記(不用於用戶註冊)是這樣的:如何在Django的forms.py中獲取登錄的用戶信息

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這個註冊模式是這樣一種形式:

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

您可以在第二行看到,我用硬編碼的性別值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

明顯地用你用來從用戶 – JudoWill

+0

得到性別的方法取代「user.gender」謝謝。它確實有幫助。 – yigit

相關問題