2009-03-02 24 views
175

Tengo un modelo de la siguiente manera.Django establece los valores de formulario predeterminados

class TankJournal(models.Model): 
    user = models.ForeignKey(User) 
    tank = models.ForeignKey(TankProfile) 
    ts = models.IntegerField(max_length=15) 
    title = models.CharField(max_length=50) 
    body = models.TextField() 

También tengo un modelo de formulario para el modelo anterior de la siguiente manera.

class JournalForm(ModelForm): 
    tank = forms.IntegerField(widget=forms.HiddenInput()) 

    class Meta: 
     model = TankJournal 
     exclude = ('user','ts') 

Quiero saber cómo configurar el valor por defecto del campo oculto tanque .. Aquí está mi función para mostrar/guardar el formulario hasta el momento

def addJournal(request, id=0): 
    if not request.user.is_authenticated(): 
     return HttpResponseRedirect('/') 

    # 
    # checking if they own the tank 
    # 
    from django.contrib.auth.models import User 
    user = User.objects.get(pk=request.session['id']) 

    if request.method == 'POST': 
     form = JournalForm(request.POST) 
     if form.is_valid(): 
      obj = form.save(commit=False) 

      # 
      # setting the user and ts 
      # 
      from time import time 
      obj.ts = int(time()) 
      obj.user = user 

      obj.tank = TankProfile.objects.get(pk=form.cleaned_data['tank_id']) 

      # 
      # saving the test 
      # 
      obj.save() 

    else: 
     form = JournalForm() 

    try: 
     tank = TankProfile.objects.get(user=user, id=id) 
    except TankProfile.DoesNotExist: 
     return HttpResponseRedirect('/error/') 

    form.tank = id 
    return render_to_response('ajax/tank_addJournal.html', {'form': form}, context_instance=RequestContext(request)) 

Gracias.

Respuesta

313

Puede utilizar inicial que se explica here

Usted tiene dos opciones o bien rellenar el valor al llamar constructor del formulario:

form = JournalForm(initial={'tank': 123}) 

o establecer el valor en la definición del formulario:

tank = forms.IntegerField(widget=forms.HiddenInput(), initial=123) 
+0

Y cómo es que la variable 'initial' pasa a la forma real? En el modelo de formulario real, ¿tenemos que escribir como parámetro/argumento? – mgPePe

+0

sí, * inicial * es un parámetro con nombre –

+0

wait, wut? ¿Qué significa eso? ¿Quiere decir que, en alguna parte del _init_ de la forma, necesitaría algo como: tank = initial.tank? ¿O algo? ¿O simplemente sucedería mágicamente? – bharal

Cuestiones relacionadas