2009-03-05 67 views
0

在Django與形式奇怪的問題:的Django ForeignKey的與ModelChoiceField形式消失

我有一個Form.class這樣定義...

class MeetingForm(forms.Form): 
    owner = forms.ModelChoiceField(
      queryset=Profile.objects.all(), 
      widget=forms.HiddenInput()) 
    date = forms.DateTimeField() 
    name = forms.CharField(max_length=30) 
    etc. 

而且我通過調用像一個函數創建新實例這...

def newMeetingForm(request,profile) : 
    mf = MeetingForm({ 
     'date' : date.today(),   
     }) 
    return mf 

它按預期工作。除此之外,會議的「所有者」字段是空白的。我想我應該做的是預先填寫newMeetingForm這樣的所有者字段:

def newMeetingForm(request,profile) : 
    mf = MeetingForm({ 
     'date' : date.today(), 
     'owner' : profile, 
     }) 
    return mf 

輻角「輪廓」是配置對象。

但是,當我運行這個,表單不呈現。

我在模板中使用此:

{{ form.as_p }} 

但隨着newMeetingForm它的字面似乎走出來一個空字符串,額外的「所有者」線。我假設它以某種方式默默無聞,或許是因爲ModelChoiceField試圖呈現我預先填充的所有者值。但值看起來不錯。那麼我還應該尋找什麼?

+0

任何原因,這是分類爲社區維基?似乎是一個很好的問題。 – 2009-03-05 19:19:47

+0

我只是默認分類爲社區......以防萬一任何人都可以改進它。 – interstar 2009-03-05 19:26:49

回答

3

您的代碼在很大程度上看起來是正確的。實際上,我使用表單和表單創建代碼在我的機器上運行了一個「存根」項目,並獲得了成功的結果(誠然,我猜想配置文件模型可能看起來像什麼)。

要考慮的一件事,儘管它不會影響渲染,但是您應該使用dictionary作爲initial數據實例化MeetingForm。如果您將它作爲第一個位置參數傳遞,django將假定您的數據是POST數據,因此該表單應該進行驗證。 (道歉,如果你已經知道這一點,併爲提出問題的目的只是捷徑)。

我經常發現django的意見吞下了重要的錯誤。爲了測試表單嘗試在Django的外殼做:

$ python manage.py shell 
>>> from blah.models import Profile 
>>> from blah.forms import MeetingForm 
>>> from datetime import date 
>>> p = Profile.objects.get(id=someid) 
>>> mf = MeetingForm(initial={'date':date.today(), 'owner':p}) 
>>> print mf.as_p() 

這將輸出的形式,如果有嚴重的爆炸,錯誤也是如此。

另外,我知道這是愚蠢的,但我也做過這樣的東西:-)(額外的眼睛...等等...),你確定你傳遞的'表單'變量到你的模板渲染的上下文?而這個變量被稱爲'form',而不是'mf'或者類似的東西?

希望有幫助

0

您確定您正在將配置文件的實際實例傳遞給newMeetingForm嗎?

+0

我很確定...它來自「request.user.get_profile()」 – interstar 2009-03-05 19:08:51