如何引用Django用户模型中的字段?

时间:2012-08-11 20:54:08

标签: django django-models django-forms django-templates django-users

我有以下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预定义的“库”。

3 个答案:

答案 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表单元素中。