2009-03-02 5 views
175

У меня есть модель следующим образом.Django задает значения по умолчанию

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() 

У меня также есть модель для вышеуказанной модели следующим образом.

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

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

Я хочу знать, как установить значение по умолчанию для этого танка скрытого поля .. Вот моя функция, чтобы показать/сохранить форму до сего пор

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)) 

Спасибо.

ответ

313

Вы можете использовать начальный который объясняется here

У вас есть два варианта либо заполнить значение при вызове конструктор формы:

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

или установить значение в определении формы:

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

И как эта переменная 'initial' передается по форме? В реальной модели формы мы должны писать как параметр/аргумент? – mgPePe

+0

да, * initial * - именованный параметр –

+0

wait, wut? Что это значит? Вы имеете в виду, что где-то в _init_ формы мне нужно что-то вроде: tank = initial.tank? Или что-то? Или это просто случится волшебным образом? – bharal