2013-03-24 5 views
0

Допустим, у нас есть базовая модель Contact и Call журнала:настройка Trouble формы

Update: Кажется, мой первоначальный вопрос не предоставил достаточно подробно, чтобы объяснить мою проблему, я обновил его с более полный пример и подробности о том, что я хочу.

# 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-адреса.

+0

Почему? Какой смысл в форме, которая содержит только скрытое значение, полученное вами из URL-адреса?Чего вы на самом деле пытаетесь достичь? –

+0

Я не хочу, чтобы отношение внешнего ключа загружалось каждый раз, когда я использую форму. –

+0

Но это не то, что я спросил. Зачем вам это вообще *? Параметр исходит из URL-адреса, вы помещаете его в форму, а затем вы получаете его снова в представлении *, которое уже содержит параметр из URL *. В чем смысл? –

ответ

1

Вы загружаете форму с данными ...

MyModelForm(instance=myInstanceModel) 

Вы можете использовать параметр экземпляра для создания экземпляра формы, который поставит исходные данные в виде от этого объекта, вместо предоставления Dict атрибутов.

другой пример

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

Извинения, это не то, о чем я говорил. Я уточнил свой вопрос более подробно. –

0

Вы хотите иметь вид на обновление вашей модели, что вы ищете, UpdateView

Вид, который отображает форму для редактирования существующего object, redisplaying формы с ошибками проверки (если они есть) и сохранение изменений объекта. Это использует автоматически генерируемую форму из класса модели объекта (если только класс формы не указан вручную ). - Джанго документы

Пример:

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

class AuthorUpdate(UpdateView): 
    model = Author 

Они могут быть полезны также:

+0

Извинения, это не то, о чем я говорил. Я уточнил свой вопрос более подробно. –

Смежные вопросы