Ankita Priya
Ankita Priya

Reputation: 1

form.is_valid() is always throwing error and not able to insert values in table in Django

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)

Creating Opportunity Class

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

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

Answers (1)

Andruten
Andruten

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

Related Questions