2011-01-02 12 views
5

Bir model oluşturmak ve güncellemek istediğimi varsayalım. Hangi alanlar görüntülenir ve doğrulama türü eyleme bağlıdır (oluştur veya güncelle). Fakat yine de birçok aynı doğrulama ve fonksiyona sahipler. ModelForm'un bunu ele alması için temiz bir yol var mı (örneğin her yerde varsa) veya sadece iki farklı model formu oluşturmalı mıyım?Django tasarım kalıpları - Bir Model Oluşturma ve Güncelleme Formları

cevap

4

İki olasılık akla ilkbahar. Sen, formun __init__ yönteminde bir öznitelik ayarlayabilirsiniz ya bir parametreye dayalı açıkça geçmek ya self.instance var olup olmadığını dayanan ve sigara Yok pk vardır:

class MyModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     # either: 
     self.edit = kwargs.pop('edit', False) 
     # or: 
     self.edit = hasattr(self, instance) and self.instance.pk is not None 
     super(MyModelForm, self).__init__(*args, **kwargs) 
     # now modify self.fields dependent on the value of self.edit 

diğer seçenek modelform alt sınıfı için ise - Alt sınıftaki ortak işlevselliği, ardından alt sınıflardaki belirli oluşturma veya güncelleme işlevselliğini koru.

+0

havalı, ben de öyle düşünüyordum. Bunu yapmak için daha iyi bir yol olup olmadığını merak ediyordum, ama bu bana iyi geliyor. – killerbarney

İlgili konular