Django Python处理1种形式的{2}模型

时间:2017-01-30 13:47:35

标签: python django django-forms python-3.5

我想通过几个新字段在Django中扩展User模型。之后,我需要创建一个表单,您可以在其中注册用户模型中的用户名+密码以及我的自定义模型中的字段。

这是自定义用户字段的模型:

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 个答案:

答案 0 :(得分:1)

在Post def中执行您为UserForm所做的操作。我会发送GebruikerForm和UserForm来显示表单中的字段以及post初始化用户表单和Gebruikerform并检查验证。

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

我使用TemplateView来做所有事情,这就是我通常做的事情。