0

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

模型.py

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

表格.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}}
4

3 回答 3

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")
于 2012-11-19T12:19:22.707 回答
0

您的用户详细信息存储在Userdjango 的 default 类中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字典。

然后,您可以处理用户对象的创建,因为您的字典中有一个username和。passwordform.cleaned_data

一旦你有了你的用户对象,你现在可以Driver通过分配来创建你的对象:-

def register_driver(request):

    form = DriverRegistrationForm()

    if request.method == 'POST':

        form = DriverRegistrationForm(request.POST or None)

        if form.is_valid():
            cd = form.cleaned_data

            # Creating your user object
            user = User.objects.create_user(username=cd['username'], password=cd['password'])

            # Creating the driver object that is related to your user object above.
            Driver.objects.create(user=user, phone=cd['phone'], mobile=cd['mobile'])

   #  .... Finish your view function
于 2012-11-18T11:05:24.577 回答
0

尝试

{{ form.instance.user.username }}
于 2012-11-18T13:10:22.010 回答