2017-01-30 5 views
0

DjangoのUserモデルをいくつかの新しいフィールドで拡張したいと考えています。その後、ユーザーモデルからユーザー名+パスワードを登録できる1つのフォームを作成し、カスタムモデルのフィールドも作成する必要があります。DjangoのPythonの処理2つの形式のモデル

これは、カスタム・ユーザー・フィールドのための私のモデルである:

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

はちょうどあなたがデフポストでのUserFormのためにした何をすべきか。 GebruikerFormとUserFormを送信してフォームのフィールドを表示し、ポストでユーザーフォームとGebruikerformを初期化し、検証を確認します。

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

私はTemplateViewをすべて使用しています。これは私が通常行う方法です。

+0

私はどのような変更を適用する必要がありますか少し詳しくお聞かせください。私はDjangoの騒ぎです、返事のおかげでtho –

関連する問題