Django-registration-redux add extra field

7 and python 2.7. I want to add an extra field to django registration. I am trying to expand my model as follows:

class Seller(models.Model): user = models.ForeignKey(User, unique=True) name = models.CharField(max_length=25) phone_number = models.BigIntegerField() email = models.EmailField(max_length=75) def __str__(self): return self.name; 

and I add form.py like this

  from django import forms from registration.forms import RegistrationForm from django.forms import ModelForm from django.contrib.auth.models import User from kerajinan.models import Product, Category, Seller class SellerForm(forms.ModelsForm): class Meta: model = Seller fields = ('name','phone_number','email') 

and modify url.py as follows:

 url(r'^accounts/', 'registration.views.register',{'form_class':SellerForm,'backend': 'registration.backends.default.DefaultBackend'}) 

how to use this model with django registration and i get error syntax with my ulr.py?

thanks

+5
source share
2 answers

This works for me:
models.py

 from django.db import models from django.contrib.auth.models import User class UserProfile(models.Model): field = models.CharField(max_length=3) user = models.OneToOneField(User) 

forms.py

 from registration.forms import RegistrationFormUniqueEmail from django import forms class UserProfileRegistrationForm(RegistrationFormUniqueEmail): field = forms.CharField() 

Create regbackend.py and write:

 from registration.backends.default.views import RegistrationView from forms import UserProfileRegistrationForm from models import UserProfile class MyRegistrationView(RegistrationView): form_class = UserProfileRegistrationForm def register(self, request, form_class): new_user = super(MyRegistrationView, self).register(request, form_class) user_profile = UserProfile() user_profile.user = new_user user_profile.field = form_class.cleaned_data['field'] user_profile.save() return user_profile 

And urls.py

 from django.conf.urls import include, url import regbackend urlpatterns = [ url(r'^accounts/register/$', regbackend.MyRegistrationView.as_view(), name='registration_register'), ] 
+7
source

I found a way to do this! ( The last answer threw me some errors) Let me explain this: (Django 1.10.5 and Django-registration-redux 1.4)

application /models.py:

 class Profile(models.Model): user = models.OneToOneField(User, primary_key=True) passport_id = models.IntegerField(max_length=10) 

application /forms.py:

 from registration.forms import RegistrationFormUniqueEmail from django import forms from .models import Profile class ProfileForm(RegistrationFormUniqueEmail): passport = forms.IntegerField(max_length=10) 

Then I created the -famous-regbackend.py file. Note that the register method accepts only one parameter (form). You must remember to create and save a new object (record) in the database model table, as in the following code:

application /regbackend.py

 from registration.backends.default.views import RegistrationView from .forms import ProfileForm from .models import Profile class MyRegistrationView(RegistrationView): form_class = ProfileForm def register(self, form_class): new_user = super(MyRegistrationView, self).register(form_class) p = form_class.cleaned_data['passport'] new_profile = Profile.objects.create(user=new_user, passport=p) new_profile.save() return new_user 

root /urls.py

 from app.regbackend import MyRegistrationView urlpatterns = [ url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), url(r'^accounts/', include('registration.backends.default.urls'))] 

After that, you can configure some other things for the field (validations, etc.).

+4
source

All Articles