我有以下models.py
class UserProfile(models.Model):
user = models.OneToOneField(User)
url = models.URLField(blank=True)
address=models.CharField(max_length=60)
location = models.CharField(max_length=30)
join_date = models.DateField(auto_now_add=True)
我有以下forms.py
class UserForm(ModelForm):
class Meta:
model = UserProfile
我有以下views.py
def login_temp(request):
form = UserForm()
c = RequestContext(request, {
'form': form,
})
return render_to_response('registration/login.html', c)
在我的模板(login.html)中,如何访问django定义的User类的字段。我目前正在使用下面的语法。使用此语法,“地址”输入字段出现在我的模板中,但“用户名”输入字段不是
<form action="/accounts/register/" method="POST">
<label class="control-label" for="id_address">Address</label>
{{ form.address }}
<label class="control-label" for="id_username">Username</label>
{{ form.username }}
</form>
我尝试过{{ form.user.username }}
,但这也不起作用。我究竟做错了什么?如何获取用户名字段以显示在我的模板中?仅供参考,变量用户名在用户模型中定义。 User模型是一个使用Django预定义的“库”。
答案 0 :(得分:1)
如果要从现有模型实例加载包含日期的表单,则需要更改此行
form = UserForm()
类似
form = UserForm(instance=existing_user_profile)
其中existing_user_profile
是UserProfile的现有实例。
答案 1 :(得分:0)
您可以通过反向关系访问用户对象。试试这个:
{{ form.user.username }}
答案 2 :(得分:0)
你在这里混淆了一些事情。您的UserProfile模型的实例可以通过user
属性访问相关的用户实例,因此您可以执行my_profile.user.username
。
但在这里你不是在谈论实例,而是在谈论形式。询问如何访问相关模型的字段是没有意义的。表单只包含实际由该表单定义的字段,在您的情况下,您的表单只包含UserProfile模型的字段。
如果您需要用户模型的字段,则需要自己将其添加到表单定义中。但是您需要手动保存它们 - 它们不会包含在自动form.save()
中。或者,使用两个单独的模型,包含在单个HTML表单元素中。