2009-01-11 16 views
10

यह गैर-इनलाइन के लिए आसान है। बस अपने admin.py AdminOptions में निम्नलिखित ओवरराइड:मैं Django में एक कस्टम इनलाइन व्यवस्थापक विजेट कैसे जोड़ूं?

def formfield_for_dbfield(self, db_field, **kwargs): 
    if db_field.name == 'photo': 
     kwargs['widget'] = AdminImageWidget() 
     return db_field.formfield(**kwargs) 
    return super(NewsOptions,self).formfield_for_dbfield(db_field,**kwargs) 

मैं बाहर काम नहीं कर सकता कि यह कैसे अनुकूलित करने के लिए inlines के लिए काम करने के लिए।

उत्तर

8

यह बिल्कुल वही काम करता है। TabularInline और StackedInline कक्षाओं में एक formfield_for_dbfield विधि भी है, और आप इसे अपने उप-वर्ग में उसी तरह ओवरराइड करते हैं।

+0

रवींद्र काम कर रहा है! मैं चीजों को अधिक जटिल बना रहा था और इनलाइनफॉर्मसेट फैक्ट्री के साथ घूम रहा था और जैसा! –

1

संपादित करें: कभी नहीं। यह मेरे हिस्से पर सिर्फ एक बेवकूफ त्रुटि थी।

क्या आप संभवतः इनलाइनों में काम करने का एक छोटा सा स्निपेट प्रदान कर सकते हैं? जब मैं नीचे दिए गए कोड को आजमाता हूं तो मुझे कुछ अजीब कुंजीपेश मिल रहा है।

class PictureInline(admin.StackedInline): 
    model = Picture_Gallery 
    extra = 3 
    def formfield_for_dbfield(self, db_field, **kwargs): 
     if db_field.name == 'name': 
      kwargs['widget'] = MyWidget() 
     return super(PictureInline,self).formfield_for_dbfield(db_field,**kwargs) 
6
Django 1.1 के बाद से

, formfield_overrides भी

formfield_overrides = { 
    models.ImageField: {'widget': AdminImageWidget}, 
} 
+0

समस्या यह है कि यह एक नया फ़ील्ड जोड़ना चाहता है जब डिफ़ॉल्ट = इनलाइन पर कुछ पर सेट हो। –

संबंधित मुद्दे