0

我有以下models.py如何引用Django用戶模型中的字段?

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) 

在我的模板(登錄。 html),我如何訪問Django定義的用戶類的字段。我目前使用下面的語法。有了這個語法中,「地址」輸入欄會出現在我的模板,但「用戶名」輸入字段不

<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

您可以通過反向關係訪問用戶對象。試試這個:如果你想從現有的模型實例裝載日期的形式

{{ form.user.username }} 
+0

我也試過。它也沒有工作。還有其他建議嗎? – goelv 2012-08-11 21:01:10

1

,你需要

form = UserForm() 

更改此行像

form = UserForm(instance=existing_user_profile) 

其中existing_user_profile是UserProfile的現有實例。

+0

我不想加載預先存在的數據。我想創建一個輸入字段,用戶可以在其中鍵入用戶名,單擊註冊,然後創建新配置文件/創建新數據。 – goelv 2012-08-11 21:11:44

+0

我希望它是空白的。問題在於它根本沒有顯示「文本框」或「輸入槽」,我可以在其中輸入某些內容。你知道我的意思嗎 – goelv 2012-08-11 21:14:05

+0

啊我明白了。在這種情況下,請參閱但以理的回答。 – Ghopper21 2012-08-11 21:18:33

0

你在這裏混淆了一些東西。您的UserProfile模型的一個實例可以通過user屬性訪問相關的User實例,因此您可以使用my_profile.user.username

但是,在這裏你不是在談論實例,而是在談論形式。問你如何訪問相關模型的字段是沒有意義的。表單只包含實際由該表單定義的字段,在您的情況下,您只有一個表單,其中只包含UserProfile模型的字段。

如果您需要用戶模型的字段,您需要自己將它們添加到表單定義中。但是您需要手動保存它們 - 它們不會包含在自動form.save()中。或者,使用兩個單獨的模型,包含在一個HTML表單元素中。

相關問題