2012-12-01 35 views
5

में सेटिंग पासवर्ड की अनुमति नहीं देता है मैंने एक कस्टम उपयोगकर्ता मॉडल बनाया है जिसे मैं सफलतापूर्वक अपने ऐप में उपयोग कर रहा हूं।django में कस्टम उपयोगकर्ता मॉडल व्यवस्थापक

समस्या यह है कि व्यवस्थापक के भीतर, उपयोगकर्ता संपादन स्क्रीन पर, मुझे पासवर्ड सेट करने के लिए बहुत ही उपयोगी इंटरफ़ेस के बजाय वर्तमान पासवर्ड हैश का प्रदर्शन मिलता है।

मैं पाइथन 2.7 पर Django 1.5b1 का उपयोग कर रहा हूं।

मैं व्यवस्थापक उपयोगकर्ता इंटरफ़ेस के लिए अपने उपयोगकर्ता मॉडल के इलाज के लिए Django व्यवस्थापक को कैसे समझ सकता हूं, वैसे ही यह मूल उपयोगकर्ता का व्यवहार करता है?

उत्तर

9

दस्तावेज़ीकरण का सुझाव है कि आपको व्यवस्थापक के साथ कस्टम मॉडल पंजीकृत करना होगा और कुछ तरीकों को भी परिभाषित करना होगा ताकि व्यवस्थापक इंटरफ़ेस कस्टम उपयोगकर्ता मॉडल के साथ काम कर सके।

आपको उपयोगकर्ता के लिए अंतर्निहित रूपों को भी परिभाषित करना पड़ सकता है।

Custom users and django.contrib.admin

से तुम भी व्यवस्थापक के साथ अपने कस्टम उपयोगकर्ता मॉडल पंजीकरण करना होगा। यदि आपका कस्टम उपयोगकर्ता मॉडल सार तत्व का विस्तार करता है, तो आप Django की मौजूदा उपयोगकर्ता एडमिन कक्षा का उपयोग कर सकते हैं। हालांकि, यदि आपका उपयोगकर्ता मॉडल सार BaseUser को बढ़ाता है, तो आपको कस्टम मॉडलएडमिन कक्षा को परिभाषित करने की आवश्यकता होगी।

+1

यह काम किया! अधिक जानकारी: मेरा मॉडल UserAdmin पर आधारित नहीं है, लेकिन लगता है, वार्ता करता है, एक की तरह चलता है (एक ही फ़ील्ड है, और अधिक)। मैं अपना खुद का कस्टम मॉडल व्यवस्थापक पंजीकृत करने में सक्षम था जिसे मैंने न्यूनतम प्रयास और कोड डुप्लिकेशन के साथ बनाया था। मेरा मॉडल व्यवस्थापक django.contrib.auth.admin.UserAdmin बढ़ाता है और फ़ील्ड, फॉर्म, और add_form को ओवरराइड करता है। फॉर्म और एड_फॉर्म बदले में, मेरा कस्टम फॉर्म इंगित करता है जो Django- प्रदत्त UserCreationForm और UserChangeForm को बढ़ाता है और मेटा सबक्लास को ओवरराइड करता है ताकि मेरे मॉडल को इंगित किया जा सके। यह आश्चर्यजनक है कि यह सामान एक साथ कैसे काम करता है! इसके अलावा, बतख-टाइपिंग के लिए प्रोप। –

0

यदि आप सारबेसबेसर का विस्तार कर रहे हैं, तो आपको मॉडल फॉर्म से प्राप्त पासवर्ड के बिना दो रूपों, एक सृजन फ़ॉर्म और अपडेट फॉर्म की आवश्यकता होगी।

फिर व्यवस्थापक के रूप में, अलग बना सकते हैं और अद्यतन रूपों को निर्दिष्ट इसी fieldsets साथ:

के लिए
class MyUserAdmin(UserAdmin): 
    # The forms to add and change user instances 
    form = UserChangeForm 
    add_form = UserCreationForm 

    fieldsets = (
     (None, {'fields': ('email', 'first_name', 'last_name')}), 
    ) 
    add_fieldsets = (
     (None, {'fields': ('email', 'password', 'password2', 'first_name', 'last_name')}), 
    ) 

पासवर्डों नए उपयोगकर्ताओं काम करेंगे। व्यवस्थापक में बजाय पूर्व परिभाषित django रूप में पासवर्ड परिवर्तन करें।

1

बस अपने प्रपत्र से जोड़ें:

password = ReadOnlyPasswordHashField(
     label= ("Password"), 
     help_text= ("Raw passwords are not stored, so there is no way to see " 
        "this user's password, but you can change the password " 
        "using <a href=\"password/\">this form</a>.")) 

कम से कम 1.10 में https://stackoverflow.com/a/15630360/780262

0

से उधार ली गई, मैं निम्नलिखित ऐसा करने में सक्षम था। उपरोक्त से सरल। मैंने इसे admin.py:

from django.contrib.auth.admin import UserAdmin 
from django.contrib import admin 
from myapp.models import MyUser 

class MyUserAdmin(UserAdmin): 
    model = MyUser 

    fieldsets = UserAdmin.fieldsets + (
      (None, {'fields': ('a_custom_field',)}), 
    ) 

admin.site.register(MyUser, MyUserAdmin) 
संबंधित मुद्दे