从表单访问用户信息

时间:2012-11-17 22:20:29

标签: django django-models django-forms

我有一个包含用户对象的模型,以及一个基于该模型的扩展表单 如何在表单中访问User对象的字段?如果不是这样做的话,推荐的方式是什么?

models.py

class Driver(models.Model):
    user = models.OneToOneField(User)
    phone = models.CharField(max_length=200)
    mobile = models.CharField(max_length=200)

forms.py

class DriverRegistrationForm(ModelForm):
    class Meta:
        model = Driver

page.html (我本来希望做的......)

<label for="id_username">Username<span class="small">Add your name</span></label>{{form.user.username}}<!-- Not like this... -->
<label for="id_password">Password <span class="small">Small and big letters</span></label>{{form.user.password}}<!-- Not like this... -->
<label for="id_phone">Phone <span class="small">Your phone number</span></label>{{form.phone}}

3 个答案:

答案 0 :(得分:1)

在这种情况下,您还可以扩展默认用户创建表单

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

class DriverRegistrationForm(UserCreationForm):
    phone = models.CharField(max_length=200)

    class Meta:
        model = User
        fields = ("username", "phone", "password1", "password2")

答案 1 :(得分:0)

您的用户详细信息存储在django默认User的{​​{1}}课程中。这意味着您希望用户输入的“用户名”和“密码”的值分别存储在数据库中的django.contrib.auth.models表中,但与您的自定义User类相关。

我不会在这种情况下使用Driver,但我会改为使用forms.ModelForm

像这样: -

forms.Form

在处理此from django import forms class DriverRegistrationForm(forms.Form): username = forms.CharField(label='Username') password = forms.CharField(label='Password', widget=forms.PasswordInput) phone = forms.IntegerField(label='Phone') mobile = forms.IntegerField(label='Mobile') 实例提交的view function中,您现在将从form字典中输入4个值。

然后,您可以处理用户对象的创建,因为您的form.cleaned_data字典中包含usernamepassword

获得用户对象后,您现在可以通过分配以下内容来创建form.cleaned_data对象: -

Driver

答案 2 :(得分:0)

{{ form.instance.user.username }}