2012-08-01 24 views
15

उदाहरण के लिए (मामला नहीं, बल्कि सिर्फ उदाहरण के लिए) यदि मैं चयनित वस्तुओं में एक्स में विशिष्ट फ़ील्ड सेट करने के लिए कोई क्रिया जोड़ना चाहता हूं। क्या एक्स को हार्ड के विपरीत दर्ज करने की अनुमति देने के लिए एक क्रिया जोड़ना संभव है कोडित?क्या आप Django कस्टम व्यवस्थापक कार्यों में पैरामीटर जोड़ सकते हैं?

उत्तर

12

देखें: Actions that Provide Intermediate Pages

आप इसे परिवर्तन सूची पृष्ठ से कर सकते हैं नहीं है, लेकिन अपने मध्यवर्ती पृष्ठ पर, आप एक रूप है कि उपयोगकर्ता कोई मान दर्ज करने की अनुमति होगी हो सकता था, और उसके बाद के लिए उस मान का उपयोग कार्य।

4

यह Django 1.5 के साथ संभव है, हालांकि यह थोड़ा हैकिश है। मुझे यकीन नहीं है कि अन्य पुराने Django संस्करणों के साथ यह संभव है।

आप अपना खुद का मॉडलएडमिन सबक्लास लिखते हैं। ModelAdmin में action_form नामक एक विशेषता है जो परिवर्तनीय पृष्ठ पर Go बटन से पहले दिखाया गया फॉर्म निर्धारित करता है। आप अपना खुद का फॉर्म लिख सकते हैं, और इसे अपने मॉडलएडमिन सबक्लास पर action_form के रूप में सेट कर सकते हैं।

from django.contrib.admin.helpers import ActionForm 
# ActionForm is the default form used by Django 
# You can extend this class 

class XForm(ActionForm): 
    x_field = forms.CharField() 


class YourModelAdmin(admin.ModelAdmin): 
    action_form = XForm 
इन परिवर्तनों के साथ

, आप एक CharField है, जहां आप X के लिए मूल्य डाल सकते हैं होगा।

और अपने क्रिया समारोह में x_field का उपयोग करें।

def set_x_on_objects(modeladmin, request, queryset): 
    for obj in queryset: 
     obj.something = request.POST['x_field'] 
    # do whatever else you want 

class YourModelAdmin(admin.ModelAdmin): 
    action_form = XForm 
    actions = [set_x_on_objects]