2017-06-08 5 views
0

にテーブルに値を挿入することはできませんこれは私のコードです: models.pyform.is_validは()常にエラーを投げているとDjango

クラスSETUPTYPE(models.Model):

SET_UP_TYPES=(
    ('Dedicated', 'Dedicated'), 
    ('Shared','Shared'), 
) 
SetUpType=models.CharField(max_length=10,choices=SET_UP_TYPES) 

クラスSourceTool(models.Model):

SOURCE_TOOLS=(
    ('ServiceNow','ServiceNow'), 
    ('HPSM','HPSM'), 
    ('HPSAW','HPSAW'), 
    ('Remedy', 'Remedy'), 
    ('CA ServiceDesk','CA ServiceDesk'), 
    ('EHelpline', 'EHelpline'), 
    ('Microsoft SCSM','Microsoft SCSM'), 
) 
SourceToolName=models.CharField(max_length=30,choices=SOURCE_TOOLS) 

クラスモジュール(models.Model):

ModuleName=models.CharField(max_length=30) 

クラスDealSize(models.Model):

DEAL_SIZE=(
    ('<5 mn.','less than 5mn'), 
    ('>5 mn.','greater than 5 million'), 
) 
DealSize=models.CharField(default="<5 mn",max_length=30,choices=DEAL_SIZE) 

オポチュニティクラス

クラスオポチュニティ(models.Model)作成:

OppName=models.CharField(max_length=100) 
SetUpType=models.ForeignKey(SetUpType,on_delete=models.CASCADE) 
SourceTool=models.ForeignKey(SourceTool,on_delete=models.CASCADE) 
NumOfUsers=models.IntegerField(blank=True) 
NumOfTools=models.IntegerField(blank=True) 
Modules=models.ForeignKey(Modules,on_delete=models.CASCADE) 
DealSize=models.ForeignKey(DealSize,on_delete=models.CASCADE) 
ContractTimeFrame=models.IntegerField(blank=True) 
SupportMonths=models.IntegerField(blank=True) 
Pricing=models.CharField(max_length=50) 
RLS=models.CharField(max_length=50) 

SETUPTYPE、すでにSourceTool、モジュールおよびDealSizeテーブルをデータを含み、これらのテーブルの対応するデータは、以下の形式の各フィールドのドロップダウンに表示されます:

forms.py:
クラスPreReqForm(forms.ModelForm):

MODULE_NAMES = (
    ('Incident Management', 'IM'), 
    ('Requset for Service', 'SR'), 
    ('Problem Management', 'PM'), 
    ('Change Management', 'CM'), 
) 
OppName=forms.CharField(label="Opportunity Name") 
setUpTypel1 = SetUpType.objects.all() 
setUpTypel2 = [('-----', '-----'),] 
for k in setUpTypel1: 
    setUpTypel2.append((k.SetUpType, k.SetUpType)) 
SetUpType=forms.ChoiceField(choices=setUpTypel2,label="Set-up Type") 

sourceToolL1 = SourceTool.objects.all() 
sourceToolL2 = [('-----', '-----'), ] 
for m in sourceToolL1: 
    sourceToolL2.append((m.SourceToolName, m.SourceToolName)) 
SourceTool=forms.ChoiceField(choices=sourceToolL2,label="Source Tool") 

NumOfUsers=forms.IntegerField(label="Number of Users") 
NumOfTools=forms.IntegerField(label="Number of Tools") 
Modules = forms.MultipleChoiceField(choices=MODULE_NAMES, widget=forms.SelectMultiple()) 
dealSizel1 = DealSize.objects.all() 
#dUnique=dealSizel1.distinct('DealSize') 
dealSizel2 = [('-----', '-----'), ] 
for m in dealSizel1: 
    dealSizel2.append((m.DealSize, m.DealSize)) 
DealSize=forms.ChoiceField(choices=dealSizel2,label="Deal Size") 
ContractTimeFrame=forms.IntegerField(label="Contract Time Frame",widget=forms.NumberInput(attrs={'placeholder': 'In Years'})) 
#SupportMonths=forms.IntegerField(label="Support Months") 

class Meta: 
    model = Opportunity 
    fields=('OppName','SetUpType','SourceTool','NumOfUsers','NumOfTools','Modules','DealSize','ContractTimeFrame',) 
    exclude = ('Pricing','RLS','SupportMonths') 

Views.py:

がDEFプリフォーム(リクエスト):フォームの

if request.method == "POST": 
    form = PreReqForm(request.POST) 
    print request.method 
    print request.POST 
    print form.errors 
    #print request.POST.get['SetUpType'] 
    if form.is_valid(): 
     print "valid" 
     setuptype=SetUpType(SetUpType=request.POST.get['SetUpType']) 
     setuptype.save() 
     Opportunity.SetUpType=setuptype 

     Opportunity.save() 
     return redirect('preDetails') 
    else: 
     print "invalid" 
else: 
    form = PreReqForm() 

return render(request, "Prerequisites/PreReq1.html", {'form': form}) 

イメージ

Image of the form

フォームを提出した後、私は、コンソール上でこれを取得しています。エラーがある

POST:

ValueError: Cannot assign "u'Shared'": "Opportunity.SetUpType" must be a "SetUpType" instance. It is not printing form.errors and form.is_valid() also.

を助けてください。前もって感謝します。

答えて

0

なぜ私はCharFieldで選択肢を使用すると多くの問題があったのかわかりません。最後に私はIntegerFieldに切り替え、それは魅力的に機能しました。試してみる :)。

関連する問題