2012-09-18 18 views
5

मेरे पास एक django ऐप है जिसमें मैं व्यवस्थापक में उपयोगकर्ता हटाने को अक्षम करना चाहता हूं। मैंने कार्यों को अक्षम करने और झूठी अनुमति हटाने की कोशिश की है। लेकिन उनमें से कोई भी काम नहीं किया।Django व्यवस्थापक - उपयोगकर्ता हटाने को अक्षम करें

from django.contrib.auth.models import User 

class UserProfileAdmin(UserAdmin): 
    actions = None 

या

def has_delete_permission(self, request): 
     return False 

या

def get_actions(self, request): 
     actions = super(UserProfileAdmin, self).get_actions(request) 
     if 'delete_selected' in actions: 
      del actions['delete_selected'] 
     return actions 

admin.site.unregister(User) 
admin.site.register(User, UserProfileAdmin) 

लेकिन जब मैं उपयोगकर्ता जानकारी के लिए एक इनलाइन जोड़ने के लिए UserAdmin उपयोग कर रहा हूँ, यह ठीक काम कर रहा है। तो कृपया मुझे django व्यवस्थापक में उपयोगकर्ता हटाने को अक्षम करने का एक तरीका सुझाएं। अग्रिम में धन्यवाद।

+1

आप हटाने के अक्षम करने के लिए 'has_add_permission' ओवरराइड कर रहे हैं? साथ ही, विश्व स्तर पर हटाने की कार्रवाई को अक्षम करने के लिए बेहतर है और जहां भी इसकी आवश्यकता है वहां स्पष्ट रूप से जोड़ें – okm

+0

मुझे खेद है। यह वास्तव में 'has_delete_permission' है। मैंने यहाँ एक गलती की। और हटाने की कार्रवाई को अक्षम करने के बारे में, साइट-व्यापी एक अच्छा विचार है। लेकिन जब हम उपयोगकर्ता प्रविष्टि खोलते हैं, तो सबमिट-पंक्ति (सहेजें बटन पंक्ति) में एक डिलीट विकल्प होगा। इसे कैसे अक्षम करें? – arulmr

उत्तर

16

ModelAdmin.has_delete_permission ओवरराइड चाल करना चाहिए, अपने लागू हस्ताक्षर गलत है, यह एक obj पैरामीटर

class UserProfileAdmin(UserAdmin): 
    def has_delete_permission(self, request, obj=None): # note the obj=None 
     return False 

इसके अलावा गुम है, तो बस return False Django व्यवस्थापक में आइटम हटाने से व्यवस्थापक, आप कर सकते हैं सहित सभी कर्मचारी होने से बचाता है बस User/Group अनुमतियाँ tweak उनके delete_userprofile और delete_user अनुमतियों को निकाल कर उन कर्मचारियों आप उन्हें एक User(), नष्ट करने के लिए नहीं करना चाहते हैं रोकने के लिए।

+0

मैं super_user के लिए खुद को हटाने की अनुमति अक्षम करना चाहता हूं। इसके अलावा 'has_delete_permission' ने कोई प्रभाव नहीं दिखाया। – arulmr

+0

@arulmr यह अजीब बात है, क्या आपने 'UserProfileAdmin' सही तरीके से पंजीकृत किया है और व्यवस्थापक टेम्पलेट्स का कोई ओवरराइड नहीं है? 'आयात पीडीबी डालने का प्रयास करें; pdb.set_trace() '' return_delete_permission() ''' वापसी' खंड से पहले यह सुनिश्चित करने के लिए कि यह लागू हो जाता है। – okm

+0

मैं नीचे मेरी कोड दे रहा हूँ: django.contrib.auth.models से 'आयात उपयोगकर्ता django.contrib.auth.admin आयात UserAdmin से वर्ग UserProfileAdmin (UserAdmin): डीईएफ़ has_delete_permission (स्वयं, अनुरोध, obj = कोई नहीं): आयात पीडीबी; pdb.set_trace(); वापसी झूठी admin.site.unregister (उपयोगकर्ता) admin.site।रजिस्टर (उपयोगकर्ता, UserProfileAdmin) ' लेकिन ** पीडीबी ** नहीं बुलाया गया था। यहाँ गलती क्या है? मुझे लगता है कि कोड प्रारूप इस टिप्पणी में अच्छा नहीं होगा। अग्रिम में धन्यवाद। – arulmr

-2

यदि आपका लक्ष्य सभी व्यवस्थापक परिवर्तन फ़ॉर्मों के नीचे से "हटाएं" बटन को स्थायी रूप से निकालना है, तो आप फ़ाइल .../django/contrib/admin/templatetags/admin_modify.py फ़ाइल को संशोधित करके ऐसा कर सकते हैं।

विशेष रूप से, की जगह लाइनों:

'show_delete_link': (not is_popup and context['has_delete_permission'] 
          and (change or context['show_delete'])), 
साथ

:

'show_delete_link': False, 

और कोई व्यवस्थापक परिवर्तन रूपों नीचे बाईं ओर स्थित हटाएं बटन को दिखाना चाहिए।

+2

django स्रोत फ़ाइलों को संपादित करना अन्य सभी अनुप्रयोगों को प्रभावित करेगा। लेकिन मैं इसे अपने वर्तमान आवेदन में ही प्राप्त करना चाहता हूं। – arulmr

+0

हाँ, क्या होगा यदि आप अपने django को अपग्रेड करना चाहते हैं? –

+0

अच्छे अंक। उम्मीद है कि मेरा जवाब मौत के लिए पीटा गया है। –

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