【问题标题】:How to refer to fields in Django's User model?如何引用 Django 用户模型中的字段?
【发布时间】:2026-02-13 21:00:02
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    form = UserForm()
    

    类似

    form = UserForm(instance=existing_user_profile)
    

    其中existing_user_profile 是UserProfile 的现有实例。

    【讨论】:

    • 我不想加载预先存在的数据。我想创建一个输入字段,用户可以在其中输入用户名,单击注册,然后创建新配置文件/创建新数据。
    • 我希望它是空白的。问题是它根本没有显示我可以实际输入内容的“文本框”或“输入槽”。你知道我的意思吗
    • 啊,我明白了。在这种情况下,请参阅丹尼尔的回答。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      {{ form.user.username }}
      

      【讨论】:

      • 我也试过了。它也没有用。还有其他建议吗?
      最近更新 更多