ModelChoiceField表单上的Django ForeignKey消失了

时间:2009-03-05 18:58:22

标签: django forms django-forms

表格中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尝试渲染我预先填充它的所有者值。但价值看起来还不错。那么我还应该寻找什么?

2 个答案:

答案 0 :(得分:3)

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

要考虑的一件事是,虽然它不会影响渲染,但您应该将字典实例化为initial数据字典。如果你将它作为第一个位置参数传递,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'变量传递给模板渲染的上下文?而变量被称为'形式',而不是'mf'或类似的东西?

希望有所帮助

答案 1 :(得分:0)

您确定要将个人资料的实际实例传递给newMeetingForm吗?