Alan salt okunur yapmak için Nasıl django formu, (veya) devre dışı böylece düzenlenemez?
Django form, ne kadar bir alanı salt okunur (veya devre dışı) yapabilirim?
Form yeni bir kayıt oluşturmak için kullanıldığında, tüm alanlarını etkin olmalıdır - ama kayıt güncelleme modundayken bazı alanlar salt okunur olması gerekiyor.
Yeni Öğe bir model oluştururken, örneğin, tüm alanlar düzenlenebilir olması gerekir, ancak kayıt güncelleme sırasında, orada görünür ancak böylece STB alanı devre dışı bırakmak için bir yol düzenlenecek.
class Item(models.Model):
sku = models.CharField(max_length=50)
description = models.CharField(max_length=200)
added_by = models.ForeignKey(User)
class ItemForm(ModelForm):
class Meta:
model = Item
exclude = ('added_by')
def new_item_view(request):
if request.method == 'POST':
form = ItemForm(request.POST)
#validate and save
else:
form = ItemForm()
#render the view
Sınıf İtemForm yeniden kullanılabilir? Değişiklikler İtemForm veya ürün model sınıfında gerekli ne olabilir? Başka bir sınıf yazmak gerekir ki, "İtemUpdateForm", güncelleme için madde?
def update_item_view(request):
if request.method == 'POST':
form = ItemUpdateForm(request.POST)
#validate and save
else:
form = ItemUpdateForm()
CEVAP
Widget giriş devre dışı bırakmak ve kötü niyetli SONRASI kesmek önlemek için, form alanı readonly
öznitelik ayarı ek olarak giriş fırçalayın gerekir:
class ItemForm(ModelForm):
def __init__(self, *args, **kwargs):
super(ItemForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
self.fields['sku'].widget.attrs['readonly'] = True
def clean_sku(self):
instance = getattr(self, 'instance', None)
if instance and instance.pk:
return instance.sku
else:
return self.cleaned_data['sku']
Ya da, başka bir koşul düzenleme olduğunuzu gösteren if instance and instance.pk
değiştirin. Ayrıca readonly
yerine giriş alanı üzerinde 8 ** özniteliğini ayarlayın.
Clean_sku işlevi salt okunur değeri POST
tarafından geçersiz olmayacak emin olun.
Aksi takdirde, yerleşik bağlı veri girişi reddederken bir değer kılacak olan Django form alanı yok. Eğer bu istediğiniz ne ise, düzenlenemez alanı(s) dışlar ve sadece şablon içinde onları baskı ayrı bir ModelForm oluşturmak gerekir.
'devre dışı=&; devre dışı" " ...
Nasıl Alt F4 kapatma formu Devre dışı ...
Nasıl bir WordPress kullanmak bir giri...
Nasıl devre dışı bırakmak C kullanıcıl...
Nasıl alan'Django kimliği s formu...