Pereiti prie turinio

Django custom fields registracijos formoje


Rekomenduojami pranešimai

Norėčiau pridėti papildomus laukus į Django registracijos formą tokius kaip web_page ar number, tačiau niekaip nesugalvoju kaip tai padaryti tiksliau: nežinau kaip juos išsaugoti duomenų bazėje ir kad jie būtų prieinami per /admin.

 

Mano forms.py failas:

 

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm 
from django.contrib import admin



class MyRegistrationForm(UserCreationForm):
   email = forms.EmailField(required=True)
   first_name = forms.CharField(required = False)
   last_name = forms.CharField(required = False)
   number = forms.CharField(required = False)
   web_page = forms.CharField(required = False)

   class Meta:
       model = User
       fields = ('username', 'email', 'password1', 'password2','first_name','last_name', 'number', 'web_page')
       def save(self,commit = True):   
           user = super(MyRegistrationForm, self).save(commit = False)
           user.email = self.cleaned_data['email']
           user.first_name = self.cleaned_data['first_name']
           user.last_name = self.cleaned_data['last_name']
           user.number = self.cleaned_data['number']
           user.web_page = self.cleaned_data['web_page']



           if commit:
               user.save()

           return user

 

views.py failo fragmentas:

 

def register_user(request):
   if request.method == 'POST':
       form = MyRegistrationForm(request.POST)
       if form.is_valid():
           form.save()
           return HttpResponseRedirect('/register_success/')
       else:
           return HttpResponseRedirect('/accounts/')

   args = {}
   args.update(csrf(request))


   args['form'] = MyRegistrationForm()  
   print (args)
   return render_to_response('register.html', args)

Redagavo Cibulinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nesupratau, kodėl save() metodą priskiri Meta klasei, o ne pačiai formai :)

 

update(csrf(request))

Tikrai nereikia visur, tam yra {% csrf_token %} tagas ir atitinkamas context processorius. https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/#how-to-use-it

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nesupratau, kodėl save() metodą priskiri Meta klasei, o ne pačiai formai :)

 

update(csrf(request))

Tikrai nereikia visur, tam yra {% csrf_token %} tagas ir atitinkamas context processorius. https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/#how-to-use-it

 

 

aišku dėkui už pastebejimus, bandysiu žiūrėti. O gal zinai kaip tuos papildomus field`us įdėti ?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jie yra tik web browseryje, tačiau kaip juos atvaizduoti per /admin panelę ar paimti kažkurio userio įvestą tarkim web_page?

O ar jie bent yra User modelyje? Nes man panašu, kad importuoji defaultinį User modelį, kuris turi nebent first_name, last_name. Django naudoja reliacines (SQL) duomenų bazes, tad negali tiesiog imti ir priskirti kokių nori atributų – turi būti atitinkamas modelis (forma ir yra tik forma) su tam skirtais langeliais ir atitinkama SQL struktūra (kurią Django generuoja iš modelio).

 

Šiaip jau gali paveldėti iš defaultinio Django User modelio ir pridėti savų laukelių.

 

https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#extending-the-existing-user-model

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...