SORU
27 Kasım 2008, PERŞEMBE


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
28 Kasım 2008, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hanksranger

    hanksranger

    6 EKİM 2009
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006
  • Missouri Star Quilt Company

    Missouri Sta

    18 ŞUBAT 2009