2011-06-28 81 views
3

如何從視圖中獲取初始值?我應該在表格中使用什麼參數?Django:從視圖的初始值

views.py

def cadastro_usuario(request): 
    if request.method == 'POST': 
     form = cadastroForm(request.POST) 
     if form.is_valid():    
      new_user = form.save() 
      return HttpResponseRedirect("/") 
    else: 
     form = cadastroForm() 
    return render_to_response("registration/registration.html", { 
     'form': form, 'tipo_cadastro': 'PF',}) 

forms.py

class cadastroForm(UserCreationForm): 

    tipo_cadastro = forms.CharField(XXXXX) 
+1

從視圖中獲取初始值? – Brandon

+1

其實我需要在視圖中硬編碼一些變量,並將它們保存在UserProfile中(正如我向J. Landgrave解釋的) – Thomas

回答

5

好的,根據您的評論迴應@J。 Lnadgrave,讓我們假設你有可以設置你的「普通」用戶或「公司」用戶的用戶配置模型「USER_TYPE」屬性...

#your_app.constants 
NORMAL_USER = 0 
COMPANY_USER = 1 

USER_TYPE_CHOICES = (
    (NORMAL_USER, "Normal"), 
    (COMPANY_USER, "Company"), 
) 


#your_app.models 
from django.contrib.auth.models import User 
from your_app.constants import USER_TYPE_CHOICES 

class UserProfile(models.Model): 
    user = models.OneToOne(User) 
    user_type = models.PositiveSmallIntegerField(choices=USER_TYPE_CHOICES) 


#your_app.forms 
from your_app.models import UserProfile 

class UserProfileForm(forms.ModelForm): 
    class Meta(): 
     model = UserProfile 

    user_type = forms.IntegerField(widget=forms.HiddenInput) 


#your_app.views 
form django.http import HttpResponseRedirect 
from django.shortcuts import render 
from your_app.constants import NORMAL_USER, COMPANY_USER 
from your_app.forms import UserProfileForm 
from your_app.models import UserProfile 

def normal_user_registration(request): 
    user_profile_form = UserProfileForm(request.POST or None, 
     initial={'user_type' : NORMAL_USER}) 
    if request.method == 'POST': 
     user_profile_form.save() 
     return HttpResponseRedirect('/') 
    return render(request, 'registration/registration.html', 
     {'user_profile_form' : user_profile_form}) 

def company_user_registration(request): 
    user_profile_form = UserProfileForm(request.POST or None, 
     initial={'user_type' : COMPANY_USER}) 
    if request.method == 'POST': 
     user_profile_form.save() 
     return HttpResponseRedirect('/') 
    return render(request, 'registration/registration.html', 
     {'user_profile_form' : user_profile_form}) 

這是接近一個相當冗長的路這一點,但我認爲它很明顯如何將初始值傳遞給你的表單。希望能幫助你。

1

我不認爲你應該在視圖初始化任何數據,因爲它更適合於操作請求的數據,如在普通請求下運行或設置查詢。我認爲你正在尋找這個tidbit on initializing values for a form,因爲這是我在審查你給出的示例代碼之後的假設。如果我錯了,請糾正我。

+0

實際上,我需要爲兩種不同的視圖使用相同的表單和模型。每個視圖中只有一個值會發生變化。對不起,讓我解釋得更好一些,我在我的網站上有兩種類型的用戶:「普通用戶」和「公司用戶」都將使用相同的表單和模型進行註冊,但在前端將有2個不同的註冊鏈接。在這個模型中,我有一個將被填充爲用戶類型的字段...所以...我認爲只需更改一個變量即可實現2個視圖。你明白了嗎? – Thomas

1

不知道你確切需要什麼,但在我看來,檢查出Dynamic initial values 可能是有用的。您可以在視圖中爲窗體定義初始值,如下所示:

f = cadastroForm(initial={'tipo_cadastro': 'Initial Value!'})