J'ai un modèle comme suit:
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()
J'ai également un formulaire modèle pour le modèle ci-dessus comme suit:
class JournalForm(ModelForm):
tank = forms.IntegerField(widget=forms.HiddenInput())
class Meta:
model = TankJournal
exclude = ('user','ts')
Je veux savoir comment définir la valeur par défaut pour ce champ caché du réservoir. Voici ma fonction pour afficher / enregistrer le formulaire jusqu'à présent:
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
transmise au formulaire réel? Dans le modèle de formulaire actuel, devons-nous écrire comme paramètre / argument?View.get_form
pour définir les données initiales. Tout CBV avec un FormMixin (essentiellement tous les CBV qui créent ou modifient des données) peut soit utiliser uneinitial
variable au niveau de la classe (pour les valeurs par défaut immuables) ou vous pouvez remplacerFormMixin.get_initial()
pour renvoyer un dict des valeurs initiales à transmettre au constructeur du formulaire (pour les valeurs par défaut dynamiques .)Autre solution: définir l'initiale après la création du formulaire:
la source
Si vous créez un modèle à partir de valeurs POST, les valeurs initiales peuvent être affectées de cette façon:
https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#providing-initial-values
la source
or None
partie n'est vraiment pas nécessaire.J'avais cette autre solution (je la poste au cas où quelqu'un d'autre comme moi utilise la méthode suivante du modèle):
L'initiale est définie sur la
__init__
fonction commeself.fields['is_active'].initial = False
la source
J'espère que cela pourra vous aider:
la source
Comme expliqué dans les documents Django , ce
initial
n'est pas le casdefault
.La valeur initiale d'un champ est destinée à être affichée dans un HTML. Mais si l'utilisateur supprime cette valeur et renvoie finalement une valeur vide pour ce champ, la
initial
valeur est perdue. Vous n'obtenez donc pas ce qui est attendu d'un comportement par défaut .Le comportement par défaut est: la valeur que prendra le processus de validation si l'
data
argument ne contient aucune valeur pour le champ.Pour mettre en œuvre cela, un moyen simple consiste à combiner
initial
etclean_<field>()
:la source