SORU
27 Mayıs 2009, ÇARŞAMBA


Django formları, miras ve form alanları sırası

Benim web Django formları kullanıyorum ve alanların sırasını kontrol etmek ister.

Nasıl benim formları tanımlar: burada

class edit_form(forms.Form):
    summary = forms.CharField()
    description = forms.CharField(widget=forms.TextArea)


class create_form(edit_form):
    name = forms.CharField()

Adı sabit ve tek varlık oluşturulduğunda belirtilmelidir. Miras tutarlılık ve KURU prensipleri eklemek için kullanıyorum. Ne olur ki değil hatalı, aslında tamamen beklenen, adını alan listede son görünümü/html ama isterim adını alan üstte olmayı özet ve açıklama. Kolayca create_form içine özet ve açıklama kopyalayarak tamir ve miras kaybedebilirim bunu fark ediyorum ama eğer bu mümkün olup olmadığını bilmek istiyorum.

Neden?Edit_form 100 alanlar var düşünün ve create_form - kopyalama üstünde 10 alan eklemek zorunda ve iki form korumak çok seksi bak o zaman olmaz. (Budeğilbenim durumumda, sadece bir örnek hazırlıyorum)

Nasıl bu davranışı geçersiz kılabilir miyim?

Düzenleme:

Görünüşe göre kötü kesmek (işe yaramaz .geçmeden bunu yapmak için doğru bir yolu yok alan özniteliği). .alan öznitelik anahtarı yeniden düzenlemek için herhangi bir şekilde sağlamaz hangi bir SortedDict (Django iç datastructures birinin): değer çiftleri. Nasıl belirli bir dizinde öğe eklemek için bir yol sağlar ancak bu sınıfın üyeleri maddeleri hareket eder ve kurucu yok. Bu yöntem çalışır, ancak kod daha okunabilir hale getirecektir. Uygun gördüğüm diğer tek yolu çoğu durumda daha az-daha-optimal olan çerçeve kendini düzeltmektir.

Kısacası kod şöyle bir şey olacak:

class edit_form(forms.Form):
    summary = forms.CharField()
    description = forms.CharField(widget=forms.TextArea)


class create_form(edit_form):
    def __init__(self,*args,**kwargs):
        forms.Form.__init__(self,*args,**kwargs)

        self.fields.insert(0,'name',forms.CharField())

Bana kapa çeneni :)

CEVAP
15 Temmuz 2009, ÇARŞAMBA


Bu aynı sorunum vardı ve Django CookBook alanları yeniden için başka bir yöntem buldum:

class EditForm(forms.Form):
    summary = forms.CharField()
    description = forms.CharField(widget=forms.TextArea)


class CreateForm(EditForm):
    name = forms.CharField()

    def __init__(self, *args, **kwargs):
        super(CreateForm, self).__init__(*args, **kwargs)
        self.fields.keyOrder = ['name', 'summary', 'description']

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bogdan Gabriel

    Bogdan Gabri

    5 Aralık 2006
  • EEVblog

    EEVblog

    4 NİSAN 2009
  • The Dubstep FX

    The Dubstep

    5 Mart 2011