Reputation: 1
This is my code: models.py
class SetUpType(models.Model):
SET_UP_TYPES=(
('Dedicated', 'Dedicated'),
('Shared','Shared'),
)
SetUpType=models.CharField(max_length=10,choices=SET_UP_TYPES)
class 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)
class Modules(models.Model):
ModuleName=models.CharField(max_length=30)
class 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)
class Opportunity(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)
The SetUpType, SourceTool,Modules and DealSize tables already contain data and the corresponding data of these tables will be displayed in dropdown for respective fields in the below form:
forms.py:
class 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 preform(request):
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
After submitting the form i am getting this on console: POST
The error is:
ValueError: Cannot assign "u'Shared'": "Opportunity.SetUpType" must be a "SetUpType" instance. It is not printing form.errors and form.is_valid() also.
Please help. Thanks in advance.
Upvotes: 0
Views: 124
Reputation: 261
I don't know why but i had a lot of problems using choices with CharField. Finally i switched to IntegerField and it worked like a charm. Give a try :).
Upvotes: 0