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
initial
a la forma real? En el modelo de formulario real, ¿tenemos que escribir como parámetro / argumento?View.get_form
para establecer los datos iniciales. Cualquier CBV con un FormMixin (básicamente todos los CBV que crean o editan datos) puede usar unainitial
variable 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 None
parte 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 = False
fuente
Espero que esto pueda ayudarte:
fuente
Como se explica en los documentos de Django ,
initial
no 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
initial
valor 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
data
argumento no contiene ningún valor para el campo.Para implementar eso, una forma sencilla es combinar
initial
yclean_<field>()
:fuente