Ich habe ein Modell wie folgt:
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()
Ich habe auch ein Modellformular für das obige Modell wie folgt:
class JournalForm(ModelForm):
tank = forms.IntegerField(widget=forms.HiddenInput())
class Meta:
model = TankJournal
exclude = ('user','ts')
Ich möchte wissen, wie der Standardwert für dieses ausgeblendete Tankfeld festgelegt wird. Hier ist meine Funktion, um das Formular bisher anzuzeigen / zu speichern:
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
an das eigentliche Formular übergeben? Müssen wir im eigentlichen Formularmodell als Parameter / Argument schreiben?View.get_form
, um die Anfangsdaten festzulegen . Jede CBV mit einem FormMixin (im Grunde alle CBVs, die Daten erstellen oder bearbeiten) kann entweder eineinitial
Variable auf Klassenebene verwenden (für unveränderte Standardeinstellungen) oder Sie können überschreibenFormMixin.get_initial()
, um ein Diktat der Anfangswerte zurückzugeben, die an den Konstruktor des Formulars übergeben werden sollen (für dynamische Standardeinstellungen) .)Andere Lösung: Setzen Sie die Initiale nach dem Erstellen des Formulars:
quelle
Wenn Sie eine Modellform aus POST-Werten erstellen, kann initial auf folgende Weise zugewiesen werden:
https://docs.djangoproject.com/de/1.10/topics/forms/modelforms/#providing-initial-values
quelle
or None
Teil wird wirklich nicht benötigt.Ich hatte diese andere Lösung (ich poste sie, falls jemand anderes wie ich die folgende Methode aus dem Modell verwendet):
Die Initiale wird in der
__init__
Funktion als definiertself.fields['is_active'].initial = False
quelle
Ich hoffe das kann dir helfen:
quelle
Wie in Django-Dokumenten erklärt ,
initial
ist dies nicht der Falldefault
.Der Anfangswert eines Feldes soll in einem HTML angezeigt werden. Wenn der Benutzer diesen Wert löscht und schließlich einen leeren Wert für dieses Feld zurücksendet, geht der
initial
Wert verloren. Sie erhalten also nicht das, was von einem Standardverhalten erwartet wird .Das Standardverhalten ist: Der Wert, den der Validierungsprozess annimmt, wenn das
data
Argument keinen Wert für das Feld enthält.Um dies umzusetzen, ist es einfach, Folgendes zu kombinieren
initial
undclean_<field>()
:quelle