2014-12-05 7 views
9

कहो मैं एक बुनियादी CreateView विधि होती है, इस तरह, नए उपयोगकर्ताओं को एक साइट पर रजिस्टर करने के लिए अनुमति देने के लिए ओवरराइड:एक Django सामान्य वर्ग आधारित दृश्य विजेट

from django.contrib.auth import get_user_model 
from django.http import HttpResponse 
from django.views.generic import CreateView 

User = get_user_model() 


class Signup(CreateView): 

    model = User 
    fields = ['first_name', 'last_name', 'email', 'password'] 

मैं सिर्फ यह कोशिश की, और पासवर्ड पाया क्षेत्र सादा पाठ में प्रस्तुत किया जाता है; मैं दृश्य को ओवरराइड करने के बारे में कैसे जाउंगा ताकि यह फ़ॉर्म का उपयोग कर सके। पासवर्ड इनपुट() इसके बजाए? (मुझे एहसास है कि फ़ॉर्म को हाथ से परिभाषित करना शायद सबसे आसान है, लेकिन मैं इस बारे में उत्सुक हूं कि आप इसे कैसे करेंगे।)

+0

आपको इसे मॉडलफॉर्म –

उत्तर

24

आप get_form() ओवरराइड कर सकते हैं और पासवर्ड फ़ील्ड पर विजेट को बदलने के लिए फॉर्म को संशोधित कर सकते हैं :

from django import forms 

class Signup(CreateView): 
    model = User 
    fields = ['first_name', 'last_name', 'email', 'password'] 

    def get_form(self, form_class): 
     form = super(Signup, self).get_form(form_class) 
     form.fields['password'].widget = forms.PasswordInput() 
     return form 

लेकिन एक बेहतर तरीका केवल कस्टम फॉर्म क्लास बनाना होगा। कस्टम क्लास में widgets को Meta कक्षा पर सेट करें। इस तरह:

from django import forms 

class SignupForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ['first_name', 'last_name', 'email', 'password'] 
     widgets = { 
      'password': forms.PasswordInput() 
     } 

class Signup(CreateView): 
    form_class = SignupForm 
    model = User 

आमतौर पर आप कस्टम फॉर्म क्लास को form.py फ़ाइल में भी डाल देंगे।

+0

में कॉल करना चाहिए I like.py.py, +1 में जिस तरह से आप कर रहे हैं, क्या आपने कभी यह कोशिश की है? –

+1

हां मेरे पास है। हालांकि मैं फॉर्म के लिए एक अलग वर्ग बनाऊंगा। क्लीनर लगता है। – jproffitt

+0

धन्यवाद! दूसरा दृष्टिकोण मेरे लिए काम करता है, लेकिन जब मैं पहली बार करता हूं तो मुझे 'एट्रिब्यूट एरर:' सुपर 'ऑब्जेक्ट में' get_form'' 'कोई विशेषता नहीं है। –

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