无法设置表单

时间:2013-03-24 22:09:56

标签: django django-forms

假设我们有一个基本的ContactCall日志模型:

更新:我的初步问题似乎没有提供足够的细节来解释我的问题,我已经用更完整的示例更新了它,并详细说明了我想要的内容。

# Models.py

class Contact(model.Models):
    First = ...
    Last = ...
    Phone = ...

class Log(model.Models):
    contact = fields.Foreignkey(Contact)
    date = ...
    notes = ...

# urls.py

url(r'^logcall/(?P<contact_id>\d+)/$', 'myapp.views.log_call',name='log_call'),

# views.py

def log_call(request, contact_id):
    formset = modelform_factory(Log)
    form = formset(queryset=Log.objects.none(),initial={'contact':contact_id})
        if request.method == 'POST':
            form = formset(request.POST,request.FILES)
        if form.is_valid():
                form.save()
        return HttpResponseRedirect('/some/place')
    else:
        form = formset(queryset=Log.objects.none(), initial = {'contact':respondent_id,})
    return render_to_response('myform.html', {'formset':form,})

# myform.html

<form method="post" action="">
{{ formset.management_form }}
{% for form in formset %}
{{ form.id }}
{{ form.callid.as_hidden }}
{{ form.contact.as_hidden }}
{{ form.date }}
{{ form.notes }}
{% endfor %}
<button>Submit</button>
</form>

我得到的是:

<form method="post" action="">
<select id="id_form-0-contact" name="form-0-contact">
<option value="" selected="selected">---------</option>
<option value="1011">1011</option>
<option value="31736">31736</option>
<option value="19729">19729</option>
<option value="8818">8818</option>
<option value="19731">19731</option>
<option value="1468">1468</option>
... and so on
    ...
<button>Submit</button>
</form>

我想从中得到以下结论:

<form method="post" action="">
<input type="hidden" id="id_form-0-contact" name="form-0-contact" value="contact_id" />
...
<button>Submit</button>
</form>

因此,每次加载页面时,它都会调用所有关系数据,当我只需要它为联系人包含隐藏值时,根据从URL传递的值来标识id。

2 个答案:

答案 0 :(得分:1)

您使用数据加载表单...

MyModelForm(instance=myInstanceModel)

您可以使用instance参数来实例化表单,该表单将初始数据放在该对象的表单中,而不是提供属性的字典。

另一个例子

object = myModel.objects.get(id=1)
MyModelForm(instance=object)

答案 1 :(得分:0)

您希望拥有更新您的模型的视图,您正在寻找的是UpdateView

  

显示用于编辑现有对象的表单的视图,   重新显示带有验证错误的表单(如果有的话)和   保存对象的更改。这使用自动生成的表单   来自对象的模型类(除非手动使用表单类)   指定)。 - Django docs

示例:

from django.views.generic.edit import UpdateView
from myapp.models import Author

class AuthorUpdate(UpdateView):
    model = Author

这些也可能有用: