2011-06-28 13 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

[OK]をクリックしてください。 Lnadgraveは、これはアプローチにはかなり長いったらしい方法です

#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}) 

...あなたはあなたの「通常の」ユーザまたは「会社」ユーザーに設定することができ、あなたのUserProfileモデルの「USER_TYPE」プロパティを持っていると仮定しましょうこれは最初の値をフォームに渡す方法を明らかにしたと思いました。それがあなたを助けることを願っています。

1

私は、次のような、それは要求されたデータを操作するのにより適しだからあなたは、ビュー内のすべてのデータを初期化する必要があることを感じていません通常の要求で動作したり、クエリを設定することができます。私はあなたが私たちに与えたあなたのサンプルコードを見直した後私の前提であるので、これはtidbit on initializing values for a formを探していると思います。私が間違っているなら、私を修正してください。

+0

実際には、私は2つの異なるビューのために同じフォームとモデルを使用する必要があります。各ビューで1つの値だけが変更されます。申し訳ありませんが、私はより良い説明をしましょう、私は私のサイトに2つのタイプのユーザーを持っています: "普通のユーザー"と "会社のユーザー"は同じフォームとモデルを使って登録しますが、フロントエンドには2つの異なるリンクがあります。モデルでは、ユーザーのタイプとして記入されるフィールドがあります。だから...私は1つの変数を変更するだけで2つのビューを行うと考えました。わかりましたか? – Thomas

1

あなたが正確に必要なものはわかりませんが、私にはDynamic initial values をチェックするのが便利かもしれません。ビューのフォームの初期値は、次のように定義できます。

f = cadastroForm(initial={'tipo_cadastro': 'Initial Value!'}) 
関連する問題