0

Django中的奇怪问题与表单:

我有一个这样定义的 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

其中参数“profile”是一个 Profile 对象。

但是,当我运行它时,表单不会呈现。

我在模板中使用它:

{{ form.as_p }}

但是在 newMeetingForm 中添加了额外的“所有者”行,它实际上似乎是一个空字符串。我假设它以某种方式默默地失败了,也许是因为 ModelChoiceField 试图呈现我预先填充的所有者值。但是这些值看起来还可以。那么我还应该寻找什么?

4

2 回答 2

3

你的代码看起来是正确的,很大程度上来说。实际上,我使用您拥有的表单和表单创建代码在我的机器上运行了一个“存根”项目,并取得了成功的结果(诚然,我猜到了 Profile 模型的外观)。

需要考虑的一件事是,尽管它不会影响渲染,但您应该使用字典作为initial数据来实例化 MeetingForm。如果您将它作为第一个位置参数传递,django 将假定您的意思是该数据是 POST 数据,因此应该验证表单。(抱歉,如果您已经知道这一点,并且只是为了提出问题而走捷径)。

我经常发现 django 视图会吞下重要的错误。要测试您的表单,请尝试在 Django shell 中执行此操作:

$ 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'变量传递给上下文你的模板渲染?并且该变量被称为“form”,而不是“mf”或类似的东西?

希望有帮助

于 2009-03-05T19:19:20.583 回答
0

您确定要将 Profile 的实际实例传递给 newMeetingForm 吗?

于 2009-03-05T19:05:18.120 回答