У меня есть модель следующим образом:
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()
У меня также есть модель формы для вышеуказанной модели следующим образом:
class JournalForm(ModelForm):
tank = forms.IntegerField(widget=forms.HiddenInput())
class Meta:
model = TankJournal
exclude = ('user','ts')
Я хочу знать, как установить значение по умолчанию для этого скрытого поля танка. Вот моя функция показать / сохранить форму:
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
передается в фактическую форму? В реальной модели формы мы должны писать в качестве параметра / аргумента?View.get_form
чтобы установить начальные данные. Любой CBV с FormMixin (в основном все CBV, которые создают или редактируют данные) может либо использоватьinitial
переменную уровня класса (для неизменных значений по умолчанию), либо вы можете переопределить,FormMixin.get_initial()
чтобы возвратить указание начальных значений, которые будут переданы конструктору формы (для динамических значений по умолчанию) .)Другое решение: установить начальную после создания формы:
источник
Если вы создаете модель формы из значений POST, начальные значения могут быть назначены следующим образом:
https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#providing-initial-values
источник
or None
часть действительно не нужна.У меня было другое решение (я публикую его на тот случай, если кто-то другой, кроме меня, использует следующий метод из модели):
Начальное значение определяется в
__init__
функции какself.fields['is_active'].initial = False
источник
Я надеюсь это тебе поможет:
источник
Как объясняется в Django Docs ,
initial
это не такdefault
.Начальное значение поля предназначено для отображения в HTML. Но если пользователь удалит это значение и, наконец, отправит пустое значение для этого поля, оно
initial
будет потеряно. Таким образом, вы не получите то, что ожидается от поведения по умолчанию .По умолчанию поведение: значение, процесс проверки будет принимать , если
data
аргумент не содержит никакого значения для поля.Для реализации этого простым способом является объединение
initial
иclean_<field>()
:источник