Eu tenho um modelo da seguinte maneira:
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()
Eu também tenho um formulário de modelo para o modelo acima, da seguinte maneira:
class JournalForm(ModelForm):
tank = forms.IntegerField(widget=forms.HiddenInput())
class Meta:
model = TankJournal
exclude = ('user','ts')
Quero saber como definir o valor padrão para esse campo oculto do tanque. Aqui está minha função de mostrar / salvar o formulário até o 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/')
initial
passada para a forma real? No modelo de formulário real, precisamos escrever como um parâmetro / argumento?View.get_form
para definir os dados iniciais. Qualquer CBV com um FormMixin (basicamente todos os CBVs que criam ou editam dados) pode usar umainitial
variável em nível de classe (para padrões inalteráveis) ou você pode substituirFormMixin.get_initial()
para retornar um ditado de valores iniciais a serem passados ao construtor do formulário (para padrões dinâmicos .)Outra solução: defina inicial após criar o formulário:
fonte
Se você estiver criando um modelo de formulário a partir dos valores POST, inicial pode ser atribuído desta maneira:
https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#providing-initial-values
fonte
or None
parte não é realmente necessária.Eu tive essa outra solução (estou publicando-a no caso de alguém como eu estar usando o seguinte método do modelo):
A inicial é desativada na
__init__
função comoself.fields['is_active'].initial = False
fonte
Espero que isso possa ajudá-lo:
fonte
Como explicado nos documentos do Django ,
initial
não édefault
.O valor inicial de um campo deve ser exibido em um HTML. Mas se o usuário excluir esse valor e finalmente enviar um valor em branco para esse campo, o
initial
valor será perdido. Portanto, você não obtém o que é esperado por um comportamento padrão .O comportamento padrão é: o valor que o processo de validação assumirá se o
data
argumento não contiver nenhum valor para o campo.Para implementar isso, uma maneira direta é combinar
initial
eclean_<field>()
:fonte