Saya memiliki Model sebagai berikut:
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()
Saya juga memiliki formulir model untuk model di atas sebagai berikut:
class JournalForm(ModelForm):
tank = forms.IntegerField(widget=forms.HiddenInput())
class Meta:
model = TankJournal
exclude = ('user','ts')
Saya ingin tahu cara mengatur nilai default untuk bidang tersembunyi tangki itu. Inilah fungsi saya untuk menunjukkan / menyimpan formulir sejauh ini:
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
diteruskan ke bentuk aktual? Dalam model formulir yang sebenarnya, apakah kita harus menulis sebagai parameter / argumen?View.get_form
untuk mengatur data awal. CBV apa pun dengan FormMixin (pada dasarnya semua CBV yang membuat atau mengedit data) dapat menggunakaninitial
variabel tingkat kelas (untuk default yang tidak berubah) atau Anda dapat menggantiFormMixin.get_initial()
untuk mengembalikan dikt nilai awal yang akan diteruskan ke konstruktor formulir (untuk default dinamis) .)Solusi lain: Tetapkan inisial setelah membuat formulir:
sumber
Jika Anda membuat modelform dari nilai POST awal dapat diberikan dengan cara ini:
https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#providing-initial-values
sumber
or None
bagian yang benar-benar tidak diperlukan.Saya punya solusi lain ini (saya mempostingnya kalau-kalau ada orang lain karena saya menggunakan metode berikut dari model):
Inisial ditetapkan pada
__init__
fungsi sebagaiself.fields['is_active'].initial = False
sumber
Saya harap ini dapat membantu Anda:
sumber
Seperti yang dijelaskan dalam dokumen Django ,
initial
tidakdefault
.Nilai awal suatu bidang dimaksudkan untuk ditampilkan dalam HTML. Tetapi jika pengguna menghapus nilai ini, dan akhirnya mengirim kembali nilai kosong untuk bidang ini,
initial
nilainya hilang. Jadi, Anda tidak mendapatkan apa yang diharapkan oleh perilaku default .The standar perilaku: nilai bahwa proses validasi akan mengambil jika
data
argumen tidak mengandung nilai untuk lapangan.Untuk mengimplementasikannya, cara mudah adalah menggabungkan
initial
danclean_<field>()
:sumber