2009-03-05 69 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