0

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

4

3 回答 3

1

如果要从现有模型实例中加载带有日期的表单,则需要更改此行

form = UserForm()

类似于

form = UserForm(instance=existing_user_profile)

existing_user_profileUserProfile 的现有实例在哪里。

于 2012-08-11T21:09:17.150 回答
0

您可以通过反向关系访问用户对象。尝试这个:

{{ form.user.username }}
于 2012-08-11T21:00:18.150 回答
0

你在这里混淆了一些事情。您的 UserProfile 模型的实例可以通过user属性访问相关的 User 实例,因此您可以这样做my_profile.user.username

但是在这里,您不是在谈论实例,而是在谈论形式。询问您将如何访问相关模型的字段是没有意义的。表单仅具有由该表单实际定义的字段,在您的情况下,您有一个仅包含 UserProfile 模型字段的表单。

如果您想要用户模型的字段,您需要自己将它们添加到表单定义中。但是您需要手动保存它们 - 它们不会包含在自动form.save(). 或者,使用包含在单个 HTML 表单元素中的两个单独的模型表单。

于 2012-08-11T21:14:55.517 回答