2017-01-30 34 views
0

我想通过几个新字段扩展Django中的用户模型。之后,我需要创建一个表单,您可以在User模型中注册用户名和密码,也可以在我的自定义模型中注册字段。Django Python处理2种模型1种形式

这是我的自定义用户域模型:

class Gebruiker(models.Model): 
    id = models.OneToOneField(User, primary_key=True) 
    voornaam = models.CharField(max_length=100) 
    achternaam = models.CharField(max_length=100) 
    email = models.CharField(max_length=300) 
    gb_datum = models.DateField() 
    plaats = models.CharField(max_length=52) 
    postcode = models.CharField(max_length=6) 
    huisnummer = models.IntegerField() 
    nfid = models.IntegerField() 
    hn_toevoeging = models.CharField(max_length=3, blank=True) 

    def __str__(self): 
     return self.voornaam + self.achternaam 

,这是我的表单视图。在这种形式下,我也想添加Gebruiker模型的字段,同时保留表单的其余部分。我怎样才能做到这一点?

class UserFormView(View): 
    form_class = UserForm 
    template_name = 'home/registration_form.html' 
# display blank form 
def get(self, request): 
    form = self.form_class(None) 
    # form = self.form_class(None) 
    return render(request, self.template_name, {'form': form}) 

# process form data 
def post(self, request): 
    form = self.form_class(request.POST) 

    if form.is_valid(): 
     user = form.save(commit=False) 

     #cleaned/normalized data 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 
     user.set_password(password) 
     user.save() 

     #returns User objects if credentials are correct 
     user = authenticate(username=username, password=password) 

     if user is not None: 

      if user.is_active: 
       login(request, user) 
       return redirect('home:index') 

    return render(request, self.template_name, {'form': form}) 

我forms.py:

from django.contrib.auth.models import User 
from django import forms 
from .models import Gebruiker 

class UserForm(forms.ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
     model = User 
     fields = ['username', 'email', 'password'] 

class GebruikerForm(forms.ModelForm): 
    class Meta: 
     model = Gebruiker 
     fields = ('voornaam', 'achternaam') 

回答

1

只要你在帖子做了什么用户窗体DEF。我会发送GebruikerForm和UserForm来显示表单中的字段以及初始化后的用户表单和Gebruikerform并检查验证。

form = self.form_class(request.POST) and 
Gform_class = Gebruikerform() 
Gform = self.Gform_class(request.POST). 

我使用TemplateView的一切,这是我通常做的。

+0

您能否详细介绍一下我应该应用哪些更改?我是Django的noob,谢谢你的回复 –