Tengo un modelo de la siguiente manera:
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 establecer el valor predeterminado para ese campo oculto del tanque. Aquí está mi función para mostrar / guardar el formulario hasta ahora:
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/')
python
django
django-models
django-forms
Miguel
fuente
fuente

initiala la forma real? En el modelo de formulario real, ¿tenemos que escribir como parámetro / argumento?View.get_formpara establecer los datos iniciales. Cualquier CBV con un FormMixin (básicamente todos los CBV que crean o editan datos) puede usar unainitialvariable de nivel de clase (para valores predeterminados sin cambios) o puede anularFormMixin.get_initial()para devolver un dictado de valores iniciales para pasar al constructor del formulario (para valores predeterminados dinámicos .)Otra solución: Establecer inicial después de crear el formulario:
fuente
Si está creando forma de modelo a partir de valores POST iniciales, puede asignarse de esta manera:
https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#provide-initial-values
fuente
or Noneparte realmente no es necesaria.Tuve esta otra solución (la estoy publicando en caso de que alguien más como yo esté usando el siguiente método del modelo):
La inicial se define en la
__init__función comoself.fields['is_active'].initial = Falsefuente
Espero que esto pueda ayudarte:
fuente
Como se explica en los documentos de Django ,
initialno lo esdefault.El valor inicial de un campo está destinado a mostrarse en un HTML. Pero si el usuario elimina este valor y finalmente devuelve un valor en blanco para este campo, el
initialvalor se pierde. Por lo tanto, no obtiene lo que se espera de un comportamiento predeterminado .El comportamiento predeterminado es: el valor que tomará el proceso de validación si el
dataargumento no contiene ningún valor para el campo.Para implementar eso, una forma sencilla es combinar
initialyclean_<field>():fuente