我有一个包含用户对象的模型,以及一个基于该模型的扩展表单 如何在表单中访问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}}
答案 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
字典中包含username
和password
。
获得用户对象后,您现在可以通过分配以下内容来创建form.cleaned_data
对象: -
Driver
答案 2 :(得分:0)
试
{{ form.instance.user.username }}