personalizados formularios form fields avanzados python django forms model

python - formularios - post django



Django establece valores de formulario por defecto (4)

Otra solución: Establecer inicial después de crear el formulario:

form.fields[''tank''].initial = 123

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 formulario modelo para el modelo anterior como sigue.

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/'') form.tank = id return render_to_response(''ajax/tank_addJournal.html'', {''form'': form}, context_instance=RequestContext(request))

Gracias.


Puedes usar la inicial que se explica here

Tiene dos opciones, ya sea rellenar el valor al llamar al constructor de formularios:

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

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

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



Tenía esta otra solución (la estoy publicando en caso de que otra persona como yo esté usando el siguiente método del modelo):

class onlyUserIsActiveField(forms.ModelForm): def __init__(self, *args, **kwargs): super(onlyUserIsActiveField, self).__init__(*args, **kwargs) self.fields[''is_active''].initial = False class Meta: model = User fields = [''is_active''] labels = {''is_active'': ''Is Active''} widgets = { ''is_active'': forms.CheckboxInput( attrs={ ''class'': ''form-control bootstrap-switch'', ''data-size'': ''mini'', ''data-on-color'': ''success'', ''data-on-text'': ''Active'', ''data-off-color'': ''danger'', ''data-off-text'': ''Inactive'', ''name'': ''is_active'', }) }

La inicial está definida en la función __init__ como self.fields[''is_active''].initial = False